如何使用切片字面量在 Golang 中创建 int 数组的数组?
我尝试过:
test := [][]int{[1,2,3],[1,2,3]}
和
type Test struct {
foo [][]int
}
bar := Test{foo: [[1,2,3], [1,2,3]]}
如何使用切片字面量在 Golang 中创建 int 数组的数组?
我尝试过:
test := [][]int{[1,2,3],[1,2,3]}
和
type Test struct {
foo [][]int
}
bar := Test{foo: [[1,2,3], [1,2,3]]}
你几乎做对了,但是内部数组的语法有些错误,需要像这样使用大括号:test := [][]int{[]int{1,2,3},[]int{1,2,3}}
或者稍微简洁一点的版本: test := [][]int{{1,2,3},{1,2,3}}
这个表达式被称为“复合字面量”,你可以在这里阅读更多相关信息:https://golang.org/ref/spec#Composite_literals
但作为一个基本的经验法则,如果你有嵌套结构,你就必须递归地使用这种语法,它非常冗长。
[]
和 {}
真正重要的区别。 - evanmcdonnal只需用花括号替换方括号。在Go语言中,数组字面量使用花括号标识。
test := [][]int{{1,2,3},{1,2,3}}
[1,2,3]
可能是数组文字(array literal),但在Go语言中,复合字面量使用大括号,并且需要指定外层切片的类型:package main
import "fmt"
type T struct{ foo [][]int }
func main() {
a := [][]int{{1, 2, 3}, {4, 5, 6}}
b := T{foo: [][]int{{1, 2, 3}, {4, 5, 6}}}
fmt.Println(a, b)
}
[][]int 的元素是 [] int ,而不需要您在每个元素上都这样说。 但是,您必须写出外部类型的名称。
[]type{<value 1>, <value 2>, ... }
。一个int类型的切片可以这样定义:[]int{1,2,3}
,而一个int类型的切片的切片则可以这样定义:[][]int{[]int{1,2,3},[]int{4,5,6}}
。groups := [][]int{[]int{1,2,3},[]int{4,5,6}}
for _, group := range groups {
sum := 0
for _, num := range group {
sum += num
}
fmt.Printf("The array %+v has a sum of %d\n", sub, sum)
}
[N]type{42, 33, 567}
或[...]type{42, 33, 567}
——它会从初始化器中的成员数量推断出大小。 - kostix