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