【发布时间】:2014-01-31 03:08:07
【问题描述】:
我想在 Go 中有一个数组/切片,其中包含可变数量的元素(在编译时未知),并且能够动态添加不同类型的新元素,例如:
data[0] := "string"
data[1] // slice
data[1][0] := "another string"
data[1][1] := 42 // int
这有可能吗?
【问题讨论】:
标签: arrays multidimensional-array go slice
我想在 Go 中有一个数组/切片,其中包含可变数量的元素(在编译时未知),并且能够动态添加不同类型的新元素,例如:
data[0] := "string"
data[1] // slice
data[1][0] := "another string"
data[1][1] := 42 // int
这有可能吗?
【问题讨论】:
标签: arrays multidimensional-array go slice
这有点难看,但可以使用空接口,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])
}
如果你允许假设每个元素必须是一个长度可变的数组,那么它就不那么难看了:
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])
}
【讨论】: