向切片添加匿名struct元素

时间:2018-08-12 12:14:29

标签: go

假设我有一个匿名结构

data := []struct{a string, b string}{}

现在,我想在此切片上添加一个新项目。

data = append(data, ???)

我该怎么做?有任何想法吗?

2 个答案:

答案 0 :(得分:9)

由于您使用的是匿名结构,因此必须再次在append语句中使用具有相同声明的匿名结构:

data = append(data, struct{a string, b string}{a: "foo", b: "bar"})

更容易使用命名类型:

type myStruct struct {
    a string
    b string
}

data := []myStruct{}

data = append(data, myStruct{a: "foo", b: "bar"})

答案 1 :(得分:0)

实际上,我找到了一种无需重复进行类型声明即可将元素添加到数组的方法。 但这很脏。

    slice := []struct {
        v, p string
    }{{}} // here we init first element to copy it later

    el := slice[0]

    el2 := el   // here we copy this element
    el2.p = "1" // and fill it with data
    el2.v = "2"

    // repeat - copy el as match as you want

    slice = append(slice[1:], el2 /* el3, el4 ...*/) // skip first, fake, element and add actual

指向struct的指针切片更为传统。在那种情况下,应对方法会略有不同

    slice := []*struct { ... }{{}}
    el := slice[0]
    el2 := *el

所有这一切都离不开良好实践。小心使用。