如何在追加或不附加的情况下向struct中添加更多数据?

问题描述 投票:-3回答:3

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

type aclStruct struct { acl string}

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

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

毫无疑问它正在发挥作用。但是当我尝试没有追加方法时,它会产生错误。例如。

我想要做的是:

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

即使不确定它是否是结构的正确方法,因为在数组上它可以正常工作。有没有办法这样做而不使用追加?

任何帮助?

go
3个回答
3
投票

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

qazxsw poi将元素附加到切片的末尾。

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

如果您想要一块结构(可用于跟踪结构的多个表示,可能具有不同的数据点),您可以通过多种方式构建该结构:

  • 使用append function,确保传递的第一个参数是(可能为空)切片: append
  • 声明切片变量a := append([]aclStruct{}, aclStruct{"A"}, ...) 并将其传递给aappend
  • 使用内联值声明和初始化切片: var a []aclStruct{} a = append(a, aclStruct{"A"}, ...) 请注意,您不需要为每个切片元素重新指定具体类型,因为它可以从切片的类型推断出来)

1
投票

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

a := []aclStruct{aclStruct{"A"}, aclStruct{"B"}, aclStruct{"C"}} 应该用于修改当前存在的切片(它附加到切片)。它抛出一个错误,因为第一个参数应该是一个切片。

如果你想使用它:

append

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

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

附加内置函数将元素附加到切片的末尾。如果它具有足够的容量,则会复制目标以容纳新元素。如果没有,将分配新的底层数组。 Append返回更新的切片。因此有必要存储append的结果,通常在保存切片本身的变量中:

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


0
投票

append的第一个参数必须是一个切片,所以正确的方法是:slice = append(slice, elem1, elem2) slice = append(slice, anotherSlice...)

要么

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

一种无需附加的方式是:

append([]aclStruct{{"A"}}, aclStruct{"B"}, aclStruct{"C"})
© www.soinside.com 2019 - 2024. All rights reserved.