func(a *Int) Add(b Int) {
*a += b
}
func(a Int) Less(b Int) bool{
return a < b
}
type LessAdder interface {
Less(b Int) bool
Add(b Int)
}
func main() {
var a Int = 1
var b LessAdder = a
b.Add(2)
fmt.Println(a)
fmt.Println(b.Less(5))
}
usercode/file.go:23: cannot use a (type Int) as type LessAdder in assignment:
Int does not implement LessAdder (Add method has pointer receiver)
--------------------------------------
type Int int
func(a *Int) Add(b Int) {
*a += b
}
func(a Int) Less(b Int) bool{
return a < b
}
type LessAdder interface {
Less(b Int) bool
Add(b Int)
}
func main() {
var a Int = 1
var b LessAdder = &a
b.Add(2)
fmt.Println(a) //3
fmt.Println(b.Less(5)) //true
}
解释:
1.任何对象在赋值给接口时会拷贝对象副本传给接口
2.如果该对象实现有pointer receiver方法(意味着可能会改变对象本身)
3.运用对象指针赋值接口,在调用pointer receiver方法时改变赋值指针所指对象本身,符合pointer receiver方法本意
4.运用对象赋值接口,在调用pointer receiver方法时改变赋值对象的副本,不符合pointer receiver方法本意,故 在go编译期间报错