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

Go: 「無効な操作: type *map[key]value はインデックス作成をサポートしていません。」が表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-12 04:53:01357ブラウズ

Go: Why Am I Getting

Go: マップのインデックス作成における「無効な操作」エラーに対処する

Go でマップを操作するときに、コンパイラ エラー「無効です」が発生する場合があります。操作: type *map[key]value はインデックス作成をサポートしていません。」このエラーは、マップ自体ではなくマップへのポインタのインデックスを作成しようとすると発生します。

次のコードを検討してください:

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := b[amount.Currency] // Error: indexing pointer to map
    ...
}

このエラーを解決するには、コードを次のように変更する必要があります。ポインターを介してマップに正しくインデックスを付けます:

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := (*b)[amount.Currency] // Index the map through the pointer
    ...
}

または、構造体がマップのみである場合は、メリットがないため、マップ ポインターを受け取るメソッドの定義を避けることをお勧めします。代わりに、以下に示すように、マップを値で受け取るメソッドを定義します。

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b Balance) Add(amount Amount) Balance { // Method receives map by value
    current, ok := b[amount.Currency]
    ...
}

func main() {
    b := Balance{Currency("USD"): 100.0}
    b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0})

    fmt.Println("Balance: ", b)
}

このアプローチでは、マップ タイプの参照の性質を維持しながら、ポインターを介したマップのインデックス付けに関連するエラーを回避します。

以上がGo: 「無効な操作: type *map[key]value はインデックス作成をサポートしていません。」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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