Alix Axel
Alix Axel

Reputation: 154533

Multidimensional Slices in Go

I would like to have an array / slice in Go with a variadic number of elements (not known at compile time) and be able to dinamically add new elements of different types, for instance:

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

Is this possible somehow?

Upvotes: 2

Views: 3276

Answers (1)

Not_a_Golfer
Not_a_Golfer

Reputation: 49187

It's a bit ugly but possible using empty interfaces, 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])

}

If you allow the assumption that each element must be an array of anything with varying length, it's a bit less ugly:

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

    }

Upvotes: 6

Related Questions