Go语言 向结构的切片追加元素[duplicate]

yhqotfr8  于 2022-12-28  发布在  Go
关注(0)|答案(1)|浏览(164)
    • 此问题在此处已有答案**:

Builtin func "append" in method for pointer receiver(2个答案)
Possible to add an append method to a slice(1个答案)
Go Pointers - append values to slice via pointer(3个答案)
How to append to a slice pointer receiver(1个答案)
How do you append data to array struct with * pointer(2个答案)
昨天关门了。
我试图将元素附加到一个结构体的切片上,但是它返回了错误,这意味着我传递的第一个参数不是切片。
Link to Go Playground.
下面是代码:

type Item struct {
  Attr string
}

type ItemsList []Item

type IItemsList interface {
  GetItemsList() ItemsList
  AddItem(Item)
}

func NewItemsList() IItemsList {
  return &ItemsList{}
}

func (il *ItemsList) GetItemsList() ItemsList {
  return *il
}

func (il *ItemsList) AddItem(i Item) {
  il = append(il, i)
}

我想不出如何正确的方式来进行这个附加。

kb5ga3dv

kb5ga3dv1#

传递的第一个参数不是切片
第一个参数是指向切片的指针。

type ItemsList []Item

func (il *ItemsList) AddItem(i Item) {
  il = append(il, i)
}

第一个参数是切片。

func (il *ItemsList) AddItem(i Item) {
    *il = append(*il, i)
}

https://go.dev/play/p/Se2ZWcucQOp
The Go Programming Language Specification
地址运算符
对于指针类型 *T的操作数x,指针间接 *x表示x所指向的类型T的变量。

相关问题