为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
函数式编程 2023-03-29 17:03:59
那么我们可以使用 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 的方法可以做到这一点吗?有帮助吗??
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

甚至不确定它是否是 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"}}

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


查看完整回答
反对 回复 2023-03-29
?
阿晨1998

TA贡献2037条经验 获得超6个赞

如果要声明三个元素的切片,请使用: 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...)


查看完整回答
反对 回复 2023-03-29
?
达令说

TA贡献1821条经验 获得超6个赞

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...}


查看完整回答
反对 回复 2023-03-29
  • 3 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信