2014-01-12 87 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 –