2014-01-12 1 views
1

에서 나는 (컴파일시에 알려지지 않은) 요소의 가변 번호 이동에 배열/슬라이스가 좋아하고 dinamically 예를 들어, 다른 유형의 새로운 요소를 추가 할 수있을 것입니다 :다차원 조각 이동

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 –