我很好奇,为什么要开不隐式转换[]T到[]interface{}时候会隐式转换T到interface{}.对于这种转换,我有什么不平凡的东西吗?
例:
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行额外代码似乎有点愚蠢.