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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 09:16:02883ブラウズ

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

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

インターフェイスに格納されている値のアドレスを取得しようとすると、多くの場合、次のようなエラーが発生します。 el.Value.(再試行)のアドレスを取得します。この制限を理解するには、インターフェイス変数の性質を調べる必要があります。

インターフェイス変数は 2 つの部分で構成されます。1 つは含まれる値の型を記述し、もう 1 つは値を直接格納するか、その値へのポインタを保持します。ストレージ。インターフェイスに格納された値は、インターフェイス変数自体によって所有されます。さらに、この値のストレージは、インターフェイスに新しい値が割り当てられるときに再利用できます。

例:

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。