请看代码
代码一
package main
import "fmt"
func main() {
var a Integer = 1
var b Integer = 2
var i interface{} = &a
sum := i.(*Integer).Add(b)
fmt.Println(sum)
}
type Integer int
func (a Integer) Add(b Integer) Integer {
return a + b
}
/*
// 这样也可以
type Integer int
func (a *Integer) Add(b Integer) Integer {
return *a + b
}
*/
代码二
package main
import "fmt"
func main() {
var a Integer = 1
var b Integer = 2
var i interface{} = a
sum := i.(Integer).Add(b)
fmt.Println(sum)
}
type Integer int
func (a Integer) Add(b Integer) Integer {
return a + b
}
/*
// 不行
//src/test1/main14/main.go:12:20: cannot call pointer method on i.(Integer)
//src/test1/main14/main.go:12:20: cannot take the address of i.(Integer)
type Integer int
func (a *Integer) Add(b Integer) Integer {
return *a + b
}*/
why?
func (receiver receiver_type) methodName(parameter_list) (return_value_list) { ... }
receiver 必须是合法的指针(包括nil) 或者 能够获取实例的地址
i.(Integer) 可以理解为 非指针 且 无法获取实例