一尘不染

转到-在结构中附加到切片

go

我正在尝试实现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方法并在其中传递一个项目


阅读 227

收藏
2020-07-02

共1个答案

一尘不染

嗯…这是人们在Go中附加到切片时最常犯的错误。您必须将结果分配回slice。

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    box.Items = append(box.Items, item)
    return box.Items
}

另外,您已经定义AddItem*MyBox类型,因此将该方法称为box.AddItem(item1)

2020-07-02