在Golang中创建数组文字数组

pra*_*432 13 go

如何使用切片文字在Golang中创建一个int数组数组?

我试过了

test := [][]int{[1,2,3],[1,2,3]}
Run Code Online (Sandbox Code Playgroud)

type Test struct {
   foo [][]iint
}

bar := Test{foo: [[1,2,3], [1,2,3]]}
Run Code Online (Sandbox Code Playgroud)

eva*_*nal 21

你几乎有正确的事情,但你的内部数组的语法略有偏离,需要花括号像; 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

但作为一个基本的经验法则,如果你有嵌套结构,你必须递归使用语法.它非常冗长.

  • 您不必对内部数组使用相同的语法:http://play.golang.org/p/Wdhabb3qca (2认同)
  • 很高兴您添加了较短的示例,但答案仍然是“您必须递归使用语法。它非常冗长”和“您必须对内部数组使用相同的语法”,当您考虑到这一点时,这似乎令人困惑或不准确内部切片可以以不同且更短的方式写出。 (2认同)

two*_*two 6

在其他一些语言(Perl、Python、JavaScript)中,[1,2,3]可能是数组字面量,但在 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)
}
Run Code Online (Sandbox Code Playgroud)

您可以在 Playground 上运行或玩

Go 编译器非常棘手,无法确定 an 的元素,[][]int[]int无需您对每个元素都这么说。不过,您必须写出外部类型的名称。


Nur*_*mik 6

只需将方括号替换为大括号即可。在 Go 中,数组文字用花括号标识。

test := [][]int{{1,2,3},{1,2,3}}