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