猿问

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

你好,我是 golang 的初学者,我正在开发购物车应用程序,每次我尝试执行代码时,它都会显示“要附加的第一个参数必须是切片”,这里是代码包 cart


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)

}


狐的传说
浏览 135回答 1
1回答

白衣非少年

您收到错误是因为您尝试在这行代码中将对象添加到 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}
随时随地看视频慕课网APP

相关分类

Go
我要回答