go语言规范之方法集
2024-09-08 10:26:34
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()
最新文章
- Tengine 安装配置全过程
- command not found,系统很多命令都用不了 ,修改环境变量
- asp.net core 笔记
- Unity本身制作keystore
- 解决 scroll() position:fixed 抖动、导航菜单固定头部(底部)跟随屏幕滚动
- BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
- hadoop版本比较 [转]
- ICSharpCode.TextEditor如何自定义代码折叠和高亮
- Atitit 版本管理----分支管理
- 实现mysql在windows server 2008下自动备份
- Error Running Git Empty git --version output:IDEA关联GitHub时出现这个错误
- PHP中cookies跨目录无法调用解决办法
- vivado License导入方法与资源获取
- 树的子结构(JAVA)
- Linux 小知识翻译 - 「编译器和解释器」
- SqlServer查询某个表的列名称、说明、备注、类型等
- [ZJOI2012]旅游
- C# if为false仍然进入方法体,==和qeual结果不一致
- spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)
- 57. Insert Interval (Array; Sort)
热门文章
- 03 Django之视图函数
- React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)
- 前端知识总结--js异步事件顺序
- UIApplicationDelegate里面最常用的几个函数执行顺序小结
- [LeetCode] 15. 3Sum ☆☆☆(3数和为0)
- IntelliJ IDEA控制台启动Tomcat输出中文乱码问题
- 【枚举】【lrj黑书】奇怪的问题(古老的智力题)
- ndk学习之C语言基础复习----结构体、共用体与C++开端
- tp5 sum某个字段相加得到总数
- 微信小程序将图片数据流添加到image标签中