我正在尝试实现2个简单的结构,如下所示:
package main import ( "fmt" ) type MyBoxItem struct { Name string } type MyBox struct { Items []MyBoxItem } func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { return append(box.Items, item) } func main() { item1 := MyBoxItem{Name: "Test Item 1"} item2 := MyBoxItem{Name: "Test Item 2"} items := []MyBoxItem{} box := MyBox{items} AddItem(box, item1) // This is where i am stuck fmt.Println(len(box.Items)) }
我究竟做错了什么?我只想在框结构上调用addItem方法并在其中传递一个项目
嗯…这是人们在Go中附加到切片时最常犯的错误。您必须将结果分配回slice。
func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem { box.Items = append(box.Items, item) return box.Items }
另外,您已经定义AddItem了*MyBox类型,因此将该方法称为box.AddItem(item1)
AddItem
*MyBox
box.AddItem(item1)