2014-01-12 58 views
1

我想有在Go阵列/切片具有元素(在编译时未知)的可变参数数目,并能够dinamically添加不同类型的新的元素,例如:多维切片在Go

data[0] := "string" 
data[1] // slice 
data[1][0] := "another string" 
data[1][1] := 42 // int 

这是可能以某种方式?

回答

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]) 

} 

如果你让每个元素都必须是具有不同长度的任何一个数组的假设,这是一个有点不太难看:

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]) 

    } 
+1

确实丑陋,但我想它确实有这个工作。谢谢! –

+0

http://play.golang.org/p/OSPskVlISE –

+0

第二个例子只有在处理2个维度时才有用,否则它会变得很难看:http://play.golang.org/p/Is2Av34sUs –