Go - 構造体のスライスに追加
Go で構造体内のスライスに追加しようとするとき、最も一般的な間違いは次のとおりです。結果をスライスに割り当てることができませんでした。
次の点を考慮してください。例:
type MyBoxItem struct { Name string } type MyBox struct { Items []MyBoxItem } func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { box.Items = append(box.Items, item) return box.Items }
関数 AddItem は MyBoxItem を受け取り、それを MyBox 構造体の Items スライスに追加します。更新されたスライスを返します。
次に、メイン関数:
item1 := MyBoxItem{Name: "Test Item 1"} item2 := MyBoxItem{Name: "Test Item 2"} items := []MyBoxItem{} box := MyBox{items} AddItem(box, item1) // Attempt to add item without fixing assignment fmt.Println(len(box.Items))
このコードは、ボックス構造体の AddItem メソッドを呼び出して item1 を渡そうとします。ただし、結果を box.Items スライスに割り当てることはできません。
これを修正するには、コードを次のように変更する必要があります。
func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { box.Items = append(box.Items, item) return box.Items }
また、AddItem 関数は*MyBox タイプに対して定義されている場合は、box.AddItem(item1).
として呼び出す必要があります。以上がGo 構造体のスライスへの追加が再割り当てなしでは機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。