Go中的多维切片

Ali*_*xel 2 arrays go slice multidimensional-array

我想在Go中有一个数组/切片,其中包含可变数量的元素(在编译时不知道),并且能够以不同方式添加不同类型的新元素,例如:

data[0] := "string"
data[1] // slice 
data[1][0] := "another string"
data[1][1] := 42 // int 
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

Not*_*fer 5

它有点难看但可能使用空接口,interface{}:

package main

import "fmt"

func main() {

    variadic := []interface{}{}

    variadic = append(variadic, "foo")
    variadic = append(variadic, []interface{}{"bar", 42})

//this will print "foo"
    fmt.Println(variadic[0])

    //note that you have to cast variadic[1] to an array before accessing it
    fmt.Println(variadic[1].([]interface{})[0])

}
Run Code Online (Sandbox Code Playgroud)

如果你允许假设每个元素必须是具有不同长度的任何数组,那么它就不那么难看了:

package main

import "fmt"

func main() {

        variadic := [][]interface{}{}

        variadic = append(variadic, []interface{}{"foo"})
        variadic = append(variadic, []interface{}{"bar", 42})


        fmt.Println(variadic[0])
        fmt.Println(variadic[1][0])
        fmt.Println(variadic[1][1])

    }
Run Code Online (Sandbox Code Playgroud)