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

要追加的第一个参数必须是slice(struct和golang),go,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 st

您好,我是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]项

type Cart struct {
    items map[string]Item
}
append()
内置函数


我不确定您想做什么,是使用贴图还是切片作为
.items
的类型。但是,如果希望
.items
属性为切片,请将代码更改为:

type Cart struct {
    items []Item
}

func NewCart() Cart {
    return Cart{
        items: make([]Item, 0)}
}
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
}
如果希望
.items
属性成为
映射
,请将代码更改为:

type Cart struct {
    items []Item
}

func NewCart() Cart {
    return Cart{
        items: make([]Item, 0)}
}
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
}

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

box.items = append(box.items, item)
同时,
box.items
类型是一个
map[string]项

type Cart struct {
    items map[string]Item
}
append()
内置函数


我不确定您想做什么,是使用贴图还是切片作为
.items
的类型。但是,如果希望
.items
属性为切片,请将代码更改为:

type Cart struct {
    items []Item
}

func NewCart() Cart {
    return Cart{
        items: make([]Item, 0)}
}
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
}
如果希望
.items
属性成为
映射
,请将代码更改为:

type Cart struct {
    items []Item
}

func NewCart() Cart {
    return Cart{
        items: make([]Item, 0)}
}
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
}