相关疑难解决方法(0)

在go中键入转换接口切片

我很好奇,为什么要开不隐式转换[]T[]interface{}时候会隐式转换Tinterface{}.对于这种转换,我有什么不平凡的东西吗?

例:

func foo([]interface{}) { /* do something */ }

func main() {
    var a []string = []string{"hello", "world"}
    foo(a)
}
Run Code Online (Sandbox Code Playgroud)

go build 抱怨

不能在函数参数中使用(type [] string)作为type [] interface {}

如果我尝试明确地做,同样的事情:b := []interface{}(a)抱怨

无法将(type [] string)转换为type [] interface {}

所以每次我需要进行这种转换(这看起来很多),我一直在做这样的事情:

b = make([]interface{}, len(a), len(a))
for i := range a {
    b[i] = a[i]
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来执行此操作,或标准库函数来帮助进行这些转换?每次我想调用一个可以获取例如整数或字符串列表的函数时,编写4行额外代码似乎有点愚蠢.

go go-interface go-reflect

171
推荐指数
6
解决办法
7万
查看次数

标签 统计

go ×1

go-interface ×1

go-reflect ×1