コード例は次のとおりです:
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 メソッドが必要とするために発生します。整数ポインタ型 レシーバ、および渡した 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 チュートリアル
以上がgolangでアドレスが取得できない問題の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。