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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-14 11:08:02351ブラウズ

Why Do I Get

Go: 無効な操作 - タイプ *map[key]value はインデックス付けをサポートしていません

Go では、ポインターでマップを渡そうとしますポインターを使用して元のマップを変更すると、「無効な操作」エラーが発生する可能性があります。これは、マップへのポインターのインデックス作成が Go でサポートされていないためです。

この問題を解決するには、ポインターではなくマップ自体にインデックスを作成する必要があります。これを行う方法を示す修正コードを次に示します。

package main

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := (*b)[amount.Currency]
    if ok {
        (*b)[amount.Currency] = current + amount.Value
    } else {
        (*b)[amount.Currency] = amount.Value
    }
    return b
}

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

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

インデックスを作成する前にマップ (*b) へのポインターを逆参照することにより、コードは元のマップを正しく変更するようになりました。

注: 上記のコードはポインターを介してマップを変更する方法を示していますが、一般的には値でマップを渡す方がより慣用的です。囲碁で。値を渡すと、マップに加えられた変更が元のマップに自動的に反映されます。

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

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