为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 nil 接口转换为 nil 其他接口

如何将 nil 接口转换为 nil 其他接口

Go
aluckdog 2023-07-17 17:14:03
我有一个经典的 Go nil 接口问题。我试图断言 an interface{},我从 a 分配nil error回一个error接口。这句话很令人困惑,所以我有一个方便的例子: https: //play.golang.com/p/Qhv7197oIE_zpackage mainimport (    "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 errorgoroutine 1 [running]:main.preferredWay(...)    /tmp/sandbox415300914/prog.go:8main.main()    /tmp/sandbox415300914/prog.go:21 +0xa0换句话说,我正在尝试从 anil interface{}向下转换为 anil error接口。如果我知道一开始就interface{}被分配为 a ,有没有一种优雅的方法可以做到这一点?nil error仅供参考,如果这看起来不寻常,那是因为我正在实施一些模拟测试。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这有效吗?

func preferredWay(i interface{}) error {
    k, _ := i.(error) 
       return k
}


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信