ホームページ >バックエンド開発 >Golang >Go インターフェイスの非ポインタ値がアドレス指定できないのはなぜですか?

Go インターフェイスの非ポインタ値がアドレス指定できないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 01:33:10385ブラウズ

Why Are Non-Pointer Values in Go Interfaces Not Addressable?

Go では非ポインター値を持つインターフェイスがアドレス指定できない理由

Golang のインターフェイスのドキュメントでは、インターフェイス内に格納された値はアドレス指定できないと示唆されています。マップ内の要素に。これにより、インターフェイス値がなぜアドレス指定できないのかという疑問が生じます。

tl;dr: 型の整合性の維持

型の整合性を維持するには、インターフェイスに非ポインター値を格納します。はアドレス指定できません。インターフェイス内の型 A の値を指すポインター (*A) について考えてみましょう。その後、別の型 (例: B) がインターフェイスに格納された場合、A へのポインタが無効になり、型の安全性が損なわれます。

アドレス指定の影響

If インターフェイス値がアドレス指定可能であった場合、予期しない影響が生じる可能性があります。たとえば、インターフェイス I、I を実装する 2 つの型 A と B、および I インスタンスに格納された A の場合、格納された値のアドレスを取得すると、そのアドレスを通じて元の値を変更できます。ただし、別の値 B が I に格納されると、元の A 値へのポインタは無効になります。

ポインタに関する注意

一方、非ポインタ インターフェイス値は無効です。アドレス指定可能な場合は、明示的なキャストを使用して値のコピーへのポインタを取得できます (例: var a2 A = i.(A) に続いて var aPtr) *A = &a2.

結論

インターフェイス値の非アドレス指定性により、異なる型の値がインターフェイスに格納されている場合に無効なポインター参照が防止され、型の整合性が確保されます。

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

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