首頁 >後端開發 >Golang >為什麼在不重新分配的情況下附加到 Go 結構中的切片不起作用?

為什麼在不重新分配的情況下附加到 Go 結構中的切片不起作用?

Susan Sarandon
Susan Sarandon原創
2024-12-14 09:34:14419瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn