你好,我是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)
}
答案 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
}