Reputation: 3929
Context: I want to use the slice data structure in golang to make a 2-D feature vector. This feature vector should be a slice that consists of slices of different types, sometimes strings, int, float64 etc.
As of yet, I can achieve this with a map (below), is there a way to implement this with a slice?
map := make(map[int]interface{}}
What should be more like:
featureVector := []interface{[]int, []float64, []string ...}
Upvotes: 14
Views: 20632
Reputation: 418435
It works as expected, you're just using wrong syntax. The element type of the slice is interface{}
, so a composite literal to initialize it should look like []interface{}{ ... }
, like in this example:
featureVector := []interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}}
And you can treat it like any other slice:
featureVector = append(featureVector, []byte{'x', 'y'})
fmt.Printf("%#v", featureVector)
Output (try it on the Go Playground):
[]interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}, []uint8{0x78, 0x79}}
But know that since the element type is interface{}
, nothing prevents anybody to append a non-slice:
featureVector = append(featureVector, "abc") // OK
This also applies to the map
solution.
Upvotes: 13