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)
这有可能吗?
它有点难看但可能使用空接口,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)