無効な操作: Go の複雑なマップ ポインターのインデックス付け
Go でマップを操作すると、「無効な操作 - タイプ」というエラー メッセージが表示されることがあります。 map[key]value はインデックス作成をサポートしていません。」このエラーは、マップ値自体ではなくマップ ポインター (map[key]value) のインデックスを作成しようとすると発生します。構造体の標準とは異なり、マップの参照解除は自動化されていません。
この問題を解決する鍵は、インデックス付け操作を実行する前にポインタを逆参照してマップ値にアクセスすることです。次の例を考えてみましょう:
func (b *Balance) Add(amount Amount) *Balance { // Dereference the pointer to access the map current, ok := (*b)[amount.Currency] if ok { (*b)[amount.Currency] = current + amount.Value } else { (*b)[amount.Currency] = amount.Value } return b }
このシナリオでは、"map[key]value" は "" 演算子を使用して逆参照され、インデックス付けの前に実際のマップ値が明らかになります。
Go のマップに対するポインタの処理は、構造体のポインタ処理とは異なります。過剰なコピーを避けるために、マップ ポインターを受け取るレシーバー関数を定義する必要はありません。代わりに、元のコード スニペットで示されているように、マップ値を直接渡します。
Go のマップ ポインターの微妙なニュアンスを理解することで、プログラマーはこの謎のエラー メッセージを効果的に解決し、不必要なコードを必要とせずに自信を持ってマップを操作できるようになります。値のコピー。
以上がGo で「無効な操作 - Type Map[key]value はインデックス作成をサポートしていません」がスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。