golang异常处理机制疑问

func updateCheck() (bool, string) {
    defer func() {
        if err := recover(); err != nil {
            glog.Error("检测版本失败:", err)
            return false, "检测版本失败"
        }
    }()
    //核心业务代码,可能会有语句抛出panic
    //...
}

为什么这里defer中检测到异常,不能返回东西?
return false, "检测版本失败"
这一行报错,显示“to many arguments”.

检测到异常应该如何返回信息,而不是直接抛出异常。

阅读 2.7k
3 个回答

参考

可以换一种方式:

func updateCheck() (b bool, s string) {
    defer func() {
        if err := recover(); err != nil {
            glog.Error("检测版本失败:", err)
            b = false
            s = "检测版本失败"
            // return
        }
    }()
    //核心业务代码,可能会有语句抛出panic
    //...
}

golang 的返回值是可以有名字的。虽然不能直接返回新的,但是可以改。

to many arguments 问题:
defer的匿名函数并没有返回值,你却返回了数据

正常情况的执行顺序:
return => defer => value

新手上路,请多包涵

这里的return 是针对defer 后的匿名函数的,匿名函数没有返回值,所以return后不能跟任何返回值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题