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)
or
func (a Integer) Add(b Integer) Integer {
return a + b
}