golangでアドレスが取得できない問題の解析

王林
リリース: 2019-12-24 16:46:12
オリジナル
3666 人が閲覧しました

golangでアドレスが取得できない問題の解析

コード例は次のとおりです:

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート