我很好奇,为什么要开不隐式转换[]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行额外代码似乎有点愚蠢.
我的Go函数应该返回一个值,但在调用库函数时可能会出现混乱.我可以用来recover()在延期调用中捕获它,但是在这种情况下如何返回值?
func MyFunc() string{
defer func() {
if err := recover(); err != nil {
// What do I do to make MyFunc() return a value in case of panic?
}
}()
SomeFuncThatMayPanic()
return "Normal Return Value"
// How can I return "ERROR" in case of panic?
}
Run Code Online (Sandbox Code Playgroud)