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

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

Susan Sarandon
發布: 2024-12-14 09:34:14
原創
418 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板