为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
狐的传说 2023-05-15 14:48:00
你好,我是 golang 的初学者,我正在开发购物车应用程序,每次我尝试执行代码时,它都会显示“要附加的第一个参数必须是切片”,这里是代码包 carttype 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)}
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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


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

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


type Cart struct {

    items map[string]Item

}

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


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


type Cart struct {

    items []Item

}


func NewCart() Cart {

    return Cart{

        items: make([]Item, 0)}

}

如果您希望该.items属性是 a 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

}


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信