指针类型比较常见

type Dog struct {
name string
} func (dog *Dog) SetName (name string){
dog.name = name
}

  对于基本类型Dog来说,*Dog就是它的指针类型。&dog就是d值不为nil的dog变量的指针值。如果一个方法的接收者是*Dog类型,那么该方法就是基本类型Dog的一个指针方法,在这种情况下,方法接收者实际上就是当前基本值的指针值,可以他通过指针值访问到基本值包含的任何字段以及调用与之关联的任何方法。

  传统意义上来说,指针式指向某个确切的内存地址的值。Go语言中还有其他几样东西可以代表指针,其中最贴近传统意义的是uintptr类型。unsafe.Pointer可以表示任何指向可寻址的值的指针。同时也是前面提到的指针值和uintptr值之间的桥梁,通过它可以在这两种值之上进行双向的转换

1、前面有个关键词,可寻址,那哪些值是不可寻址的呢?

  1)不可变的值会被存储到一个确切的内存区域

  如:常量、基本类型字面量、字符串值、基于字符串的索引或切片的结果值

  2)临时结果,可以把各种对值字面量施加的表达式的求值结果都看作是临时结果

  如:算术操作的结果值,针对值字面量的表达式的结果值、类型转换表达式结果值,类型断言表达式结果值、对函数或方法的调用结果值

  有一例外:对切片字面量的索引结果值可寻址

  如果把临时结果赋给一个变量,那么它就是可寻址的了。

  3)不安全的,破坏程序一致性

  如:字典变量的索引结果值的取址操,获取由字面量或标识符代表的函数或方法的地址   

   

2、不可寻址的值在使用上有哪些限制?

  首先是无法使用取址操作符&获取它们的指针

func New (name string ) Dog {
return Dog{name}
} New("little pig").SetName("monster")

  上面的代码可以执行成功吗?

  对一个Dog类型的变量dog来说,调用表达式dog.SetName("monster")会被自动转译为(&dog).SetName("monster"),即:先取dog的指针值,再在该指针值上调用SetName方法。但是New函数所得的结果值属于临时结果,是不可寻址的,因此会报错。

  Go语言中++或--的左边表达式的结果值必须是可寻址的。

  

[Go]指针操作的更多相关文章

  1. C#指针操作Marshal实例

    static void Main(string[] args) { ,,,}; ,,,}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数 ...

  2. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

  3. Day4:T1小技巧(类似于指针操作)T2搜索+小细节

    Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...

  4. C语言数组操作和指针操作谁更高效

    在上一篇博文  代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...

  5. C# 指针操作相关

    C# 指针操作相关 =========================================            // ** 取int 地址 以指针访问指向值 ** //         ...

  6. 在c#中用指针操作图片像素点

    在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??). 当要对一幅图进行相 ...

  7. VB指针操作和消息钩子

    二.VB怎么用指针       要想弄明白VB怎么使用指针,就必须要弄明白两件事,第一,如何取得数组的指针,第二,如何将指针所指向的数组取出来.       A.在讲解这两个问题之前,我们需要了解几个 ...

  8. 陕西师范大学第七届程序设计竞赛网络同步赛 I 排队排队排队【数组任一位可以移动到队头,最少移动几次增序/数组指针操作】

    链接:https://www.nowcoder.com/acm/contest/121/I来源:牛客网 题目描述 ACM竞赛队内要开运动会啦!!!! 竞赛队内的一群阳光乐观积极的队员们迅速的在操场上站 ...

  9. 06深入理解C指针之---指针操作和比较

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则.本节内容中指针的操 ...

  10. QTGraphics-View拖拽以及鼠标指针操作

    因为QGraphicsView继承自QWidget,它也提供了像QWidget那样的拖拽功能. 另外,为了方便,Graphics View框架也为场景以及每个item提供拖拽支持.当视图接收到拖拽事件 ...

随机推荐

  1. input标签属性

    很多时候,我们都用到了很多标签实现输入功能,所以在这里梳理一下. 1.建立一个文本框 <input type="text" name="userName" ...

  2. Docker容器相关技术

    docker需要依赖的Linux内核特性:(1)Namespaces 命名空间PID(Process ID) 用来隔离进程NET(Network) 管理网络接口IPC(InterProcess com ...

  3. Synplify FPGA 逻辑综合

    作为 Synopsys FPGA 设计解决方案的一部分,Synplify FPGA 综合软件是实现高性能.高性价比的 FPGA 设计的行业标准. 其独特的行为提取综合技术 (Behavior Extr ...

  4. FPGA原型验证

    为什么要做FPGA原型验证? FPGA原型验证可以在IC流片前对芯片功能和性能做出评估,同时,可以给软件设计人员提供验证平台.所有的设计,无论是SOC还是ASIC都需要被验证(功能和时序验证),以确保 ...

  5. 从源码中无法看出函数所在的js脚本的解决方法

    通过设置断点调试使js脚本自动出现

  6. sqlserver:查询锁住sql以及解锁

    --查看被锁表:SELECT request_session_id spid, OBJECT_NAME( resource_associated_entity_id ) tableNameFROM s ...

  7. js数组遍历的常用的几种方法以及差异和性能优化

    <script type="text/javascript"> /*对比: 1.map速度比foreach快 2.map会返回一个新数组,不对原数组产生影响,forea ...

  8. C# 递归读取XML菜单数据

    在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...

  9. SQLite – LIMIT子句

    SQLite - LIMIT子句 SQLite LIMIT子句是用来限制SELECT语句返回的数据量. 语法: SELECT语句.LIMIT子句的基本语法如下: SELECT column1, col ...

  10. HashSet LinkedHashSet TreeSet 分析

    1.HashSet分析 hashset 底层是hash表,就是hashMap,是无序的,唯一的.也就是说,它的底层其实就是一个HashMap  key 值的组成值.所以具有唯一性. public Ha ...