切片与golang的不同类型

时间:2016-09-13 16:18:40

标签: go slice

上下文:我想在golang中使用切片数据结构来制作二维特征向量。此特征向量应该是由不同类型的切片组成的切片,有时是字符串,int,float64等。

到目前为止,我可以使用地图(下方)实现这一点,有没有办法用切片实现这个?

map := make(map[int]interface{}}

更应该是什么:

featureVector := []interface{[]int, []float64, []string ...}

1 个答案:

答案 0 :(得分:7)

它按预期工作,你只是使用错误的语法。切片的元素类型为interface{},因此初始化它的composite literal应该看起来像[]interface{}{ ... },如下例所示:

featureVector := []interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}}

你可以像对待任何其他切片一样对待它:

featureVector = append(featureVector, []byte{'x', 'y'})
fmt.Printf("%#v", featureVector)

输出(在Go Playground上尝试):

[]interface{}{[]int{1, 2}, []float64{1.2, 2.2}, []string{"a", "b"}, []uint8{0x78, 0x79}}

但是要知道,因为元素类型是interface{},所以没有什么可以阻止任何人附加非切片:

featureVector = append(featureVector, "abc") // OK

这也适用于map解决方案。