在Golang中创建数组文字数组

时间:2015-10-14 05:00:30

标签: go

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

我试过

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

type Test struct {
   foo [][]iint
}

bar := Test{foo: [[1,2,3], [1,2,3]]}

4 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:4)

在其他一些语言(Perl,Python,JavaScript)中,[1,2,3]可能是数组文字,但在Go中,composite literals使用大括号,在这里,您必须指定外部的类型切片:

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 or play with that on the Playground

Go编译器非常棘手,可以确定[][]int的元素是[]int,而不必在每个元素上都这样说。但是,您必须写出外部类型的名称。

答案 2 :(得分:1)

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

const options = {} as any; // Set any options you like const formData = new FormData(); // Append files to the virtual form. const file = new File(); formData.append("fsFile", this.uploadedImage, "yes"); // Send it. this.httpClient.post("/files/upload_tmp", formData, options) .toPromise() .catch((e) => { console.log(e); });

答案 3 :(得分:0)

切片文字写为[]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)
}