go - 如何在golang中初始化接口(interface)数组?

标签 go

我想初始化一个包含接口(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/

相关文章:

go - 命令行标志和命令

list - 如何在 Go 中获取映射键的排序列表?

docker - 在 alpine 上预编译 golang

去风格指南?

Golang 依赖管理最佳实践

json - 我可以在 mgo 中使用 json 标签作为 bson 标签吗?

go - 6g : command not found error while compiling external API code in Go

go - Go可以用于BotFramework SDK吗?还是需要移植?

go - Go 中的函数类型 - 将特定类型转换为更通用的类型

go - 找go版本