ホームページ > バックエンド開発 > Golang > Go インターフェイスに格納されている値のアドレスを取得できないのはなぜですか?

Go インターフェイスに格納されている値のアドレスを取得できないのはなぜですか?

Linda Hamilton
リリース: 2024-10-30 00:20:29
オリジナル
587 人が閲覧しました

 Why Can't You Get the Address of a Value Stored in a Go Interface?

インターフェイス内の値のアドレス指定

インターフェイスに格納されている値のアドレスを取得できない理由を理解するには、次のことが重要です。インターフェイス変数の性質を詳しく調べます。基本的に、インターフェイス値は 2 つのコンポーネントで構成されます。

  • 型記述子: この部分は、基になる値の型を指定します。
  • Value/Pointer : 値のサイズに応じて、値は変数内に直接存在するか、そのストレージへのポインターが存在します。

注意すべき 2 つの重要な側面:

  1. 含まれる値はインターフェイス変数に属します。
  2. 値のストレージは後続の割り当てで再利用されます。

次のコード スニペットを考えてみましょう。

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>
ログイン後にコピー

このシナリオでは、以前に整数を保持していたストレージがポインタを格納するために再利用されます。その結果、 *p を逆参照すると、ポインタの数値表現が得られるようになりました。

型システムの侵害を防ぐために、Go はこのタイプのポインタの取得を (安全でないパッケージの使用を除いて) 意図的に制限しています。

代替ソリューション

リストに格納されている構造体のポインターにアクセスすることが要件の場合は、次の代替案を検討してください。

  • ポインターを構造体の代わりに構造体に保存します。構造体の値。
  • 含まれる構造体への参照として *list.Element を使用します。

以上がGo インターフェイスに格納されている値のアドレスを取得できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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