append()到在golang中只有一个切片字段的struct

时间:2014-07-13 19:19:35

标签: go

我想将一个元素附加到一个只包含一个匿名切片的结构:

package main

type List []Element

type Element struct {
    Id string
}

func (l *List) addElement(id string) {
    e := &Element{
        Id: id,
    }
    l = append(l, e)
}

func main() {
    list := List{}
    list.addElement("test")
}

这不起作用,因为addElement不知道l作为切片而是作为* List:

go run plugin.go
# command-line-arguments
./plugin.go:13: first argument to append must be slice; have *List

最有可能的是这样:

type List struct {
    elements []Element
}

并相应地修复addElement func。我有一个比这更好的方法,例如。让我保留List类型的第一个定义的那个?

非常感谢,sontags

1 个答案:

答案 0 :(得分:7)

两个问题,

  1. 您将*Element追加到[]Element,使用Element{}或将列表更改为[]*Element

  2. 您需要在addElement中取消引用切片。

  3. Example

    func (l *List) addElement(id string) {
        e := Element{
            Id: id,
        }
        *l = append(*l, e)
    }