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



你好,我是golang的一名beginer,我正在开发一个购物车应用程序,每次我试图执行代码时,它都会显示"要附加的第一个参数必须是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)
}

您收到错误是因为您试图使用append()将对象添加到map中,代码行为:

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

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

type Cart struct {
items map[string]Item
}

append()内置函数只能用于切片数据类型。


我不确定你想做什么,是使用贴图还是切片作为.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
}

最新更新