【问题标题】:first argument to append must be slice (struct and golang)append 的第一个参数必须是 slice(struct 和 golang)
【发布时间】:2018-12-08 10:14:13
【问题描述】:

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

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)
}

【问题讨论】:

    标签: go


    【解决方案1】:

    您收到错误是因为您尝试在这行代码中使用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


    我不确定您要做什么,是使用地图还是切片作为.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
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2021-08-28
      • 2017-04-04
      相关资源
      最近更新 更多