中国工信出版集团出版的《Go语言实战》正好讲到这个,根本原因是程序不能保证总是能获取到值的地址,例如

type duration int

func (d *duration) do( ) { }

func main() {

duration(10).do()

}

编译器会报错,不能获取duration(42)的地址,因此当你设定方法的接收者类型是指针类型时,必须保证指向这个类型的指针才能实现接口。具体为什么基本类型不能取指针,还有哪些变量值取不到地址的情况,可以参考这边博文,go addressable 详解