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

那么我们可以使用 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"})

甚至不确定它是否是 struct 的正确方法,因为在数组上它工作正常。还有没有使用 append 的方法可以做到这一点吗?

有帮助吗??


函数式编程
浏览 111回答 3
3回答

千巷猫影

甚至不确定它是否是 struct 的正确方法,因为在数组上它工作正常。append 函数将元素追加到slice的末尾。结构是静态声明的。在 Go 中根本没有办法更改它们的结构以在运行时向它们添加字段。如果您想要一片 structs,您可以使用它来跟踪结构的多个表示,可能具有不同的数据点,您可以通过多种方式构建该结构:使用append,确保传递的第一个参数是一个(可能是空的)切片:a := append([]aclStruct{}, aclStruct{"A"}, ...)声明切片变量a并将其传递给append:var a []aclStruct{} a = append(a, aclStruct{"A"}, ...)使用内联值声明和初始化切片:a := []aclStruct{{"A"}, {"B"}}请注意,您不需要为每个切片元素重新指定具体类型,因为它可以从切片的类型中推断出来)

阿晨1998

如果要声明三个元素的切片,请使用: a := []aclStruct{aclStruct{"A"}, aclStruct{"B"}, aclStruct{"C"}}append应该用于修改当前存在的切片(它附加到切片)。它抛出一个错误,因为第一个参数应该是一个切片。如果你想使用它:var a []aclStruct append(a, aclStruct{"A"})GoDoc 很好地回答了这个问题:func append(slice []Type, elems ...Type) []Typeappend 内置函数将元素追加到切片的末尾。如果它有足够的容量,则重新切片目的地以容纳新元素。如果没有,将分配一个新的底层数组。Append 返回更新后的切片。因此有必要存储追加的结果,通常在保存切片本身的变量中:slice = append(slice, elem1, elem2) slice = append(slice, anotherSlice...)

达令说

append 的第一个参数必须是一个切片,所以正确的做法是: a := append([]aclStruct{aclStruct{"A"}}, aclStruct{"B"}, aclStruct{"C"})或者append([]aclStruct{{"A"}}, aclStruct{"B"}, aclStruct{"C"})一种不附加的方法是:a := []aclStruct{aclStruct{"A"}, aclStruct{"B"}} appendedArray := []aclStruct{aclStruct{"C"}, a...}
打开App,查看更多内容
随时随地看视频慕课网APP