首页 >后端开发 >Golang >为什么在不重新分配的情况下附加到 Go 结构中的切片不起作用?

为什么在不重新分配的情况下附加到 Go 结构中的切片不起作用?

Susan Sarandon
Susan Sarandon原创
2024-12-14 09:34:14426浏览

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