Go语言规范里定义的方法集的规则

Values        Methods Receivers
-----------------------------------------------
  T          (t T)
  *T          (t T) and (t *T)

T类型的值的方法集只包含值接收者声明的方法。而指向T类型的指针的方法集既包含值接收者声明的方法,也包含指针接收者声明的方法。

从接收者类型的角度来看方法集

Methods Receivers   Values
-----------------------------------------------
  (t T)         T and *T
  (t *T)         *T

如果使用指针接收者来实现一个接口,那么只有指向那个类型的指针才能够实现对应的接口。如果使用值接收者来实现一个接口,那么那个类型的值和指针都能够实现对应的接口。

package main

import "fmt"

type duration int64

func (d *duration) pretty() string  {
return fmt.Sprintf("Duration:%d",*d)
} func main() {
duration(24).pretty()
}

上面的代码会出错

goinaction/listing46.go:12:14: cannot call pointer method on duration(24)
goinaction/listing46.go:12:14: cannot take the address of duration(24)

修改为下方即可


package main import "fmt" type duration int64 func (d *duration) pretty() string {
return fmt.Sprintf("Duration:%d",*d)
} func main() {
s:=duration(24)
s.pretty()
}

原因接收者类型是个指针而不是函数传个int。

s.pretty()在内部是(&s).pretty()

最新文章

  1. Tengine 安装配置全过程
  2. command not found,系统很多命令都用不了 ,修改环境变量
  3. asp.net core 笔记
  4. Unity本身制作keystore
  5. 解决 scroll() position:fixed 抖动、导航菜单固定头部(底部)跟随屏幕滚动
  6. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
  7. hadoop版本比较 [转]
  8. ICSharpCode.TextEditor如何自定义代码折叠和高亮
  9. Atitit 版本管理----分支管理
  10. 实现mysql在windows server 2008下自动备份
  11. Error Running Git Empty git --version output:IDEA关联GitHub时出现这个错误
  12. PHP中cookies跨目录无法调用解决办法
  13. vivado License导入方法与资源获取
  14. 树的子结构(JAVA)
  15. Linux 小知识翻译 - 「编译器和解释器」
  16. SqlServer查询某个表的列名称、说明、备注、类型等
  17. [ZJOI2012]旅游
  18. C# if为false仍然进入方法体,==和qeual结果不一致
  19. spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)
  20. 57. Insert Interval (Array; Sort)

热门文章

  1. 03 Django之视图函数
  2. React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)
  3. 前端知识总结--js异步事件顺序
  4. UIApplicationDelegate里面最常用的几个函数执行顺序小结
  5. [LeetCode] 15. 3Sum ☆☆☆(3数和为0)
  6. IntelliJ IDEA控制台启动Tomcat输出中文乱码问题
  7. 【枚举】【lrj黑书】奇怪的问题(古老的智力题)
  8. ndk学习之C语言基础复习----结构体、共用体与C++开端
  9. tp5 sum某个字段相加得到总数
  10. 微信小程序将图片数据流添加到image标签中