gpt4 book ai didi

go - append 的第一个参数必须是 slice(struct 和 golang)

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:40 25 4
gpt4 key购买 nike

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

最佳答案

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

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 .


我不确定您要做什么,是使用 map 还是 slice 作为 .items 的类型。但是,如果您希望 .items 属性成为一个 slice ,则将您的代码更改为:

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
}

关于go - append 的第一个参数必须是 slice(struct 和 golang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53681482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com