1
我想有在Go阵列/切片具有元素(在编译时未知)的可变参数数目,并能够dinamically添加不同类型的新的元素,例如:多维切片在Go
data[0] := "string"
data[1] // slice
data[1][0] := "another string"
data[1][1] := 42 // int
这是可能以某种方式?
我想有在Go阵列/切片具有元素(在编译时未知)的可变参数数目,并能够dinamically添加不同类型的新的元素,例如:多维切片在Go
data[0] := "string"
data[1] // slice
data[1][0] := "another string"
data[1][1] := 42 // int
这是可能以某种方式?
这是一个有点难看,但有可能使用空接口,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])
}
确实丑陋,但我想它确实有这个工作。谢谢! –
http://play.golang.org/p/OSPskVlISE –
第二个例子只有在处理2个维度时才有用,否则它会变得很难看:http://play.golang.org/p/Is2Av34sUs –