Go でのマップ インデックスの逆参照
Go プログラム内では、マップ インデックスを直接参照することはできません。この問題は、マップの拡大または縮小中にエントリのアドレスが変更される可能性があるというマップの動的な性質によって発生します。その結果、マップ エントリでポインター レシーバー メソッドを呼び出そうとすると、次のエラーが発生します:
cannot call pointer method on f[0] cannot take the address of f[0]
この問題を解決するには、問題のあるメソッドのメソッド レシーバーからアスタリスク (*) を削除するだけです:
func (c Cashier) Buy(itemNum int){ item, pass := c.items[itemNum] if pass{ if item.amount == 1{ delete(c.items, itemNum) } else{ item.amount-- c.items[itemNum] = item } c.cash++ } }
これにより、メソッドはポインター レシーバーではなくなり、マップ エントリで問題なく呼び出せるようになります。
以上がGo のマップ エントリでポインター レシーバーを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。