代码实例如下:
func main() { var a Integer = 1 var b Integer = 1 sum := a.Add(b) fmt.Println(sum) 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 }
报错信息如下:
test\testVar.go:16:19: cannot call pointer method on i.(Integer) test\testVar.go:16:19: cannot take the address of i.(Integer)
出现这种情况是因为Add方法需要一个Integer指针类型的接收器,而我们传过去的i.(Integer)
是个值,且这个值也没有赋给任何变量,所以符号“&”是获取不到地址的。
正确的方式是将i.(Integer)
赋值给一个变量,或者把方法接收器改成普通类型。
代码示例如下:
var i interface{} = a c := i.(Integer) sum = c.Add(b) fmt.Println(sum)
或者
func (a Integer) Add(b Integer) Integer { return a + b }
相关文章教程推荐:golang教程
Atas ialah kandungan terperinci 关于golang中无法获取地址问题的解析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!