ホームページ > バックエンド開発 > Golang > Go で「無効な操作 - Type Map[key]value はインデックス作成をサポートしていません」がスローされるのはなぜですか?

Go で「無効な操作 - Type Map[key]value はインデックス作成をサポートしていません」がスローされるのはなぜですか?

Patricia Arquette
リリース: 2024-11-21 07:42:18
オリジナル
576 人が閲覧しました

Why Does Go Throw

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

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