我想初始化一个包含接口(interface)列表的映射,而不必一个一个地添加它们:
type Pixel struct {
X float64
Y float64
}
type Vertex struct {
X float64
Y float64
Z float64
}
type testpair struct {
filename string
values []interface{}
}
var tests = map[string]testpair{
"test1": {
filename: "file1.csv",
values: []Pixel{
{X: 12.5, Y: 23.4},
{X: 17.2, Y: 7.9},
}
},
"test2": {
filename: "file2.csv",
values: []Vertex{
{X: 10.7, Y: 13.3, Z: 25.1},
{X: 18.3, Y: 16.9, Z: 16.4},
}
},
}
编译器会输出这样的错误:
cannot use []Pixel literal (type []Pixel) as type []interface {} in field value
如果我将 []interface{} 切换为 []Pixel,我可以初始化 map ,但我只能使用唯一类型的 Pixel 或 Vertex 来完成。
有没有办法强制编译器在将其声明为接口(interface)数组时接受具有特定结构的数组初始化?
最佳答案
如果您必须创建一个值 slice 来传递给需要 slice interface{}
的东西(这取决于上下文,可能是也可能不是适当的设计)或 slice 对于任何更具体的界面,您必须完全指定每个元素,如下所示:
[]interface{}{
Pixel{X: 12.5, Y: 23.4},
Pixel{X: 17.2, Y: 7.9},
}
这也意味着您可以传递以下内容:
[]interface{}{
Pixel{X: 12.5, Y: 23.4},
Vertex{X: 10.7, Y: 13.3, Z: 25.1},
}
这不是您想要的,编译器也不会警告您。不过,我认为这对测试代码来说没什么大不了的。
关于go - 如何在golang中初始化接口(interface)数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52150146/