如何通过追加或不追加将更多数据添加到结构中?

时间:2018-09-05 07:39:01

标签: go

那么我们可以使用Golang内置的append方法将更多数据添加到已定义的结构中。例如

type aclStruct struct { acl string}

a := []aclStruct{aclStruct{"A"}, aclStruct{"B"}}

a = append(a, aclStruct{"C"})

毫无疑问,它正在工作。但是,当我尝试不使用append方法时,会产生错误。例如

我想做的是:

a := append(aclStruct{"A"}, aclStruct{"B"}, aclStruct{"C"})

即使不确定在结构上是否正确,因为在数组上它可以正常工作。还有没有使用append的任何方法吗?

有帮助吗?

3 个答案:

答案 0 :(得分:3)

  

即使不确定在结构上是否正确,因为在数组上它可以正常工作。

append function将元素追加到切片的末尾。

结构是静态声明的。 Go中根本没有办法更改它们的结构以在运行时向其添加字段。

如果要使用结构切片(可用于跟踪结构的多种表示形式,也许使用不同的数据点),则可以通过以下几种方式构建该结构:

  • 使用append,确保传递的第一个参数是一个切片(可能为空):

    a := append([]aclStruct{}, aclStruct{"A"}, ...)
    
  • 声明切片变量a并将其传递给append

    var a []aclStruct{}
    a = append(a, aclStruct{"A"}, ...)
    
  • 使用内联值声明和初始化切片:

    a := []aclStruct{{"A"}, {"B"}}
    

    请注意,您无需为每个slice元素重新指定具体类型,因为可以从slice的类型中推断出来)

答案 1 :(得分:1)

如果要声明三个元素的切片,请使用: a := []aclStruct{aclStruct{"A"}, aclStruct{"B"}, aclStruct{"C"}}

append应该用于修改当前存在的切片(附加到切片)。它抛出错误,因为第一个参数应该是切片。

如果要使用它:

var a []aclStruct append(a, aclStruct{"A"})

GoDoc很好地回答了这个问题:

func append(slice []Type, elems ...Type) []Type

append内置函数将元素追加到切片的末尾。如果具有足够的容量,则将目标切片为容纳新元素。如果没有,将分配一个新的基础数组。追加返回更新的切片。因此,有必要将append的结果存储在通常包含切片本身的变量中:

slice = append(slice, elem1, elem2) slice = append(slice, anotherSlice...)

答案 2 :(得分:0)

append的第一个参数必须是切片,因此正确的做法是: docker-compose up --build

a := append([]aclStruct{aclStruct{"A"}}, aclStruct{"B"}, aclStruct{"C"})

一种无需添加的方式是:

append([]aclStruct{{"A"}}, aclStruct{"B"}, aclStruct{"C"})