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中文网其他相关文章!