ホームページ >バックエンド開発 >Golang >Go 構造体のスライスへの追加が再割り当てなしでは機能しないのはなぜですか?

Go 構造体のスライスへの追加が再割り当てなしでは機能しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-14 09:34:14422ブラウズ

Why Doesn't Appending to a Slice in a Go Struct Work Without Reassignment?

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

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