那么我们可以使用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的任何方法吗?
有帮助吗?
答案 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"})