附加的第一个参数必须是slice(struct和golang)

时间:2018-12-08 10:14:13

标签: go

你好,我是golang的入门者,并且我正在使用购物车应用程序,每次我尝试执行代码时,它都会显示“附加的第一个参数必须为slice”,这是代码 包装车

type Cart struct {
    items map[string]Item
}

type Item struct {
    id       string
    name     string
    price    float32
    quantity int
}

func NewItem(i string, n string, p float32) Item {
    return Item{
        id:       i,
        name:     n,
        price:    p,
        quantity: 0,
    }
}

func NewCart() Cart {
    return Cart{
        items: map[string]Item{}}
}

func (box *Cart) AddItem(item Item) []Item {
    box.items = append(box.items, item)
    return box.items
}

func main() {
    utils.CreateLogger("shopping-cart")
    shoppingCart := cart.NewCart()

    item1 := cart.NewItem("potato121", "Potato", 10)

    err := shoppingCart.AddItem(item1)
}

1 个答案:

答案 0 :(得分:1)

出现此错误是因为您尝试在以下代码行上使用map将对象添加到append()中:

box.items = append(box.items, item)

与此同时,box.items类型是map[string]Item

type Cart struct {
    items map[string]Item
}

append()内置函数can only be used on a slice data type


对于将地图还是切片用作.items的类型,我不确定您要做什么。但是,如果您希望将.items属性设为切片,则将代码更改为以下内容:

type Cart struct {
    items []Item
}

func NewCart() Cart {
    return Cart{
        items: make([]Item, 0)}
}

如果您希望.items属性为map,请将代码更改为此:

func NewCart() Cart {
    return Cart{
        items: map[string]Item{}}
}

func (box *Cart) AddItem(item Item) map[string]Item {
    box.items[item.id] = item
    return box.items
}