Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Golang中创建数组文字的数组_Go - Fatal编程技术网

在Golang中创建数组文字的数组

在Golang中创建数组文字的数组,go,Go,如何使用切片文字在Golang中创建int数组数组 我试过了 test := [][]int{[1,2,3],[1,2,3]} 及 切片文字写为[]类型{,…}。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 := r

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

我试过了

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


切片文字写为
[]类型{,…}
。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)
} 

你几乎拥有了正确的东西,但是你的内部数组的语法有点不正确,需要像这样的大括号<代码>测试:=[]int{[]int{1,2,3},[]int{1,2,3}或更简洁的版本<代码>测试:=[]int{{1,2,3},{1,2,3}

该表达式称为“复合文字”,您可以在此处阅读更多关于它们的信息

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

在其他一些语言(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)
}
你可以


Go编译器非常复杂,您不必在每个元素上都这样说,就可以知道
[]]int
的元素是
[]int
。不过,您必须写出外部类型的名称。

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


测试:=[]int{{1,2,3},{1,2,3}

值得重申的是,您正在尝试创建一个切片,而不是数组。要创建数组,您可以使用
[N]类型{42,33,567}
[…]类型{42,33,567}
-从初始值设定项中的成员数推断出大小。^确定,我猜在围棋中你很少使用数组,语法也很相似,所以我基本上会交换这两个数组,即使它们是不同的东西。我不会说我很少使用它们。在解析某个网络协议的代码中,通常先对数组进行减量,然后对其进行多次重新切片——将这些切片(类似于底层数组的窗口)传递给其他函数。在这两种情况下,a)我认为你脑子里可能有错误的模型,需要修正;-)b) 最好不要混淆读者,因为读者稍后会无意中发现您的文章。您不必对内部数组使用相同的语法:@twoo true,这在技术上是不同的,我更喜欢它。很高兴您添加了一个较短的示例,但答案仍然是“您必须递归使用语法。它非常冗长”,并且“内部数组必须使用相同的语法,“当你认为内部的片断可以用不同的和短的方式写出来时,这似乎是混淆或不准确的。”我认为这是吹毛求疵。这是相同的语法,它们都被称为“复合文字”。只是在内部集合的情况下,可以推断类型信息,但使用
[]
vs
{}
确实是重要的区别。您不必指定值的类型:
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)
}