如何在切片内设置结构的字段?

Ste*_*fen 1 struct go slice

我声明了这样的类型

type Klabel struct {
    values []float64
    label  string
}
Run Code Online (Sandbox Code Playgroud)

然后,我像这样创建了这种类型的切片

kdata := []Klabel
Run Code Online (Sandbox Code Playgroud)

如何设置label变量或将一片浮点数附加到值?

我试过了

kdata[0].label = "test"
Run Code Online (Sandbox Code Playgroud)

kdata := make([]Klabel, 10)

kdata[0].label = "test"
Run Code Online (Sandbox Code Playgroud)

kdata = append(kdata[0], kdata[0].label = "test")
Run Code Online (Sandbox Code Playgroud)

好吧,没有成功......

所以任何帮助表示赞赏!提前致谢!

icz*_*cza 5

你发布了这个:

kdata := make([]Klabel, 10)

kdata[0].label = "test"
Run Code Online (Sandbox Code Playgroud)

它有效.打印kdata切片时,输出为(Go Playground):

[{[] test} {[] } {[] } {[] } {[] } {[] } {[] } {[] } {[] } {[] }]
Run Code Online (Sandbox Code Playgroud)

输出显示kdata有10个元素,第一个具有标签值:"test".

为了更清楚,打印它:

fmt.Printf("%+v", kdata)
Run Code Online (Sandbox Code Playgroud)

输出:

[{values:[] label:test} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:}]
Run Code Online (Sandbox Code Playgroud)

切片(与地图不同)是可寻址的.您可以通过简单地索引切片并为字段分配新值来更改元素的字段(即结构).

例如:

kdata[0].label = "test"
kdata[0].values = []float64{1.1, 2.2}
kdata[0].values = append(kdata[0].values, 3.3)

fmt.Printf("%+v", kdata[0])
Run Code Online (Sandbox Code Playgroud)

输出:

{values:[1.1 2.2 3.3] label:test}
Run Code Online (Sandbox Code Playgroud)

如果要将一片浮点数附加到values元素的字段:

vals := []float64{1.2, 2.3}

kdata[0].values = append(kdata[0].values, vals...) // Note the 3 dot ...
Run Code Online (Sandbox Code Playgroud)