一、先来看一段代码

package mainimport "fmt"type X struct{}func (x *X) test(){println("h1",x)
}
func main(){a := X{} a.test()(&X{}).test()(X{}).test()
}

猜猜他的结果

二、揭晓答案

package mainimport "fmt"type X struct{}func (x *X) test(){println("h1",x)
}
func main(){a := X{} a.test()   // 正确(&X{}).test()  // 正确 (X{}).test()  // 报错 cannot call pointer method on X literal
}

三、为什么会是这样的

  • 声明赋值后调用指针方法
a :=x
a.test()  //正确
   指针方法可以调用的条件:receiver 必须是合法的指针(包括nil) 或者 能够获取实例的地址 a 是一个可以寻址的变量 ,所以可以调用test() 指针方法When the value is addressable, the language takes care of the common case of invoking a pointer method on a value by inserting the address operator automatically.翻译:当值是可被寻址的,go语言会处理通常的情况:在一个值上面调用它的指针方法,编译器会自动插入一个&取地址操作符
  • (&X{}).test() 正确
   指针方法可以调用的条件:receiver 必须是合法的指针(包括nil) 或者 能够获取实例的地址 (&X{})  是一个合法的指针
  • (X{}).test() 报错
    变量名 = 右值X{}  就是右值右值 是不可寻址的(unaddressable) ,所以会报错

四、疑问

(X{}).test()    不可寻址 报错了
为什么
(&X{}).test()   能取到地址了?

转载于:https://www.cnblogs.com/xiaobaiskill/p/10936481.html

go 成长路上的坑(1)相关推荐

  1. 程序员生存定律——成长路上常见的坑

    程序员生存定律--成长路上常见的坑 2014-7-8 10:09| 发布者: 小isabella| 查看: 2549| 评论: 6|原作者: leezy_2000|来自: CSDN 摘要: 1. &q ...

  2. 【致青春】致成长路上的那些琐事

    致成长路上的哪些琐事 2004年9月份,我踏上了梦想向往的城市(广州)开始了三年的中专生活,新的城市生活.新的同学面孔,以及对于从未接触过的计算机的我开始了计算机专业的课程,转眼间就马上要2014了, ...

  3. 是不是每个人的成长路上都会有迷茫的阶段?

    是不是每个人的成长路上都会有迷茫的阶段? 没有方向. 没有目标. 有人说坚持努力学习扩大思维格局,持续不断大量地行动!就能打破这个格局. 但问题是现在大部分人都不知道自己的方向到底是什么.怎么打破? ...

  4. 同行:成长路上的三人行

    成长的路上,有时会感觉陷入了停顿,就像前行的一辆车陷在了泥地里,不管你怎么加油踩油门,它只是在原地打转而无法继续前行.这时,我们就需要有人来帮助,或推或拉或扶. 孔子说:"三人行,必有我师& ...

  5. 送给正在 奋斗和成长路上的女人们

    努力是你的象征,自信是资本,微笑是你的标志,女人干事业,并不是要赚多少钱,而是让自己的人生变得独立而精彩,很多女人都在追求物质财富,而一部分女人却在追求自我成长,成功是优秀的附产物,女人的成长比赚更多 ...

  6. 程序员生存定律--成长路上常见的坑

    程序员生存定律这系列的目录在这里:程序员生存定律--目录 喜欢从头瞄的,可以移步. ---------------------------------------------------------- ...

  7. 程序员生存定律--成长路上常见的坑(2)

    程序员生存定律这系列的目录在这里:程序员生存定律--目录 喜欢从头瞄的,可以移步. ---------------------------------------------------------- ...

  8. 自动化测试成长路上必会技巧

    目录 1. 首先要搞明白几个问题 2. 语言基础 3. selenium学习,脚本编写 4. 执行测试,脱离脚本阶段 5. 参数化.配置.日志.简单框架搭建 6. 自动执行,自动发送报告 7. 高级货 ...

  9. SRE(运维工程师)成长路上的十本书籍推荐

    今天来整理一下自己在SRE成长路线上一些对自己帮助很大的书籍. 更多内容可以关注微信公众号"SRE说" 运维了解和入门的两本书 书籍一:<网站运维:保持数据实时的秘技> ...

最新文章

  1. OpenGL indexedCube索引多维数据集的实例
  2. 7-3 符号三角形 (10 分)(思路+详解)
  3. a标签无跳转的死链接
  4. assertionerror python_Python 基础(十四): 错误和异常
  5. Android O后台服务限制总结
  6. Linux操作系统分区格式Ext2,Ext3,Ext4的区别
  7. 大工微电子器件可靠性基础作业四威布尔分布小题求参数m和t0
  8. 如何将网页保存保存为PDF格式?
  9. centos7加入Windows域
  10. 微信小程序开发官方文档解读
  11. Win 10 Edge不能上网,微软商店打不开的问题
  12. python后端需要什么基础_学习Python需要哪些基础知识?_后端开发
  13. python怎么输入括号
  14. 深度学习-【语义分割】学习笔记4 膨胀卷积(Dilated convolution)
  15. 解决D3DCompiler_47.dll文件丢失找不到问题
  16. 北京汉正天成科技有限公司大家听说过没?这家公司怎么样?
  17. 2023 IEEE Fellow出炉:唐立新、宗成庆、朱军、姬水旺、李佳等入选
  18. pandas.tseries.offset, 获取季度,月度第一天(最后一天)
  19. 标签纸张如何在条码打印软件中进行设置
  20. 2021年焊工(初级)报名考试及焊工(初级)免费试题

热门文章

  1. 【C++grammar】继承与构造test1代码附录
  2. let 只能在严格模式下吗_LET的完整形式是什么?
  3. 达尔豪斯大学计算机科学世界排名,达尔豪斯大学成了全加最好,这又是个什么排名?...
  4. nutsdb与mysql_分享下 nutsdb 单机 1 亿、10 亿数据实测
  5. python解释器环境中、用于表示上一次_文学人类学概说_尔雅文学人类学概说答案第四小节课后作业答案...
  6. 《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器
  7. 音视频之使用sonic.cpp实现音频倍速播放功能
  8. linux 网络编程:使用两线程实现socket同时收发数据
  9. 函数setjump和longjmp
  10. open函数和close函数的使用