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