中国工信出版集团出版的《Go语言实战》正好讲到这个,根本原因是程序不能保证总是能获取到值的地址,例如
type duration int
func (d *duration) do( ) { }
func main() {
duration(10).do()
}
编译器会报错,不能获取duration(42)的地址,因此当你设定方法的接收者类型是指针类型时,必须保证指向这个类型的指针才能实现接口。具体为什么基本类型不能取指针,还有哪些变量值取不到地址的情况,可以参考这边博文,go addressable 详解