我有一个经典的围棋无接口的问题。
我试图断言的interface{}
这是我从一个分配nil
error
,回到一个error
界面。 那句话是混淆了,所以我有一个方便,花花公子例如: https://play.golang.com/p/Qhv7197oIE_z
package main
import (
"fmt"
)
func preferredWay(i interface{}) error {
return i.(error)
}
func workAround(i interface{}) error {
if i == nil {
return nil
}
return i.(error)
}
func main() {
var nilErr error
fmt.Println(workAround(nilErr)) // Prints "<nil>" as expected.
fmt.Println(preferredWay(nilErr)) // Panics.
}
输出:
<nil>
panic: interface conversion: interface is nil, not error
goroutine 1 [running]:
main.preferredWay(...)
/tmp/sandbox415300914/prog.go:8
main.main()
/tmp/sandbox415300914/prog.go:21 +0xa0
因此,换句话说,我试图从向下转型nil
interface{}
到nil
error
接口。 有一种优雅的方式来做到这一点,如果我知道的interface{}
被指定为一个nil
error
,开始用?
仅供参考,如果这似乎是不寻常,是因为我采取了一些嘲弄进行测试。