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