美文网首页
Go使用命名返回值捕获内部函数的panic

Go使用命名返回值捕获内部函数的panic

作者: kker | 来源:发表于2018-02-08 14:30 被阅读30次

在Go的函数中,如果要捕获内部的panic函数,并将该panic作为error返回一般写法是:

func test() error {
    var err error
    defer func() {
        if r := recover(); r != nil {
            err = errors.New(fmt.Sprintf("%s", r))
        }
    }()
    raisePanic()
    return err
}

但这样的写法无法将raisePanic函数panic出来的信息返回出来,即便panic最后函数的返回值也是nil
正确的写法应该将函数签名的返回值改为命名返回值,如下:

func test() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = errors.New(fmt.Sprintf("%s", r))
        }
    }()
    raisePanic()
    return err
}

相关文章

  • Go使用命名返回值捕获内部函数的panic

    在Go的函数中,如果要捕获内部的panic函数,并将该panic作为error返回一般写法是: 但这样的写法无法将...

  • golang panic&recover

    触发panic 捕获 panic recover 的使用,有一个条件,就是它必须在 defer 函数中才能生效,其...

  • go 的标准日志库 Log

    我们常使用 Go log 以下三组函数: Print/Printf/Println : 打印日志信息 Panic/...

  • 第05天(异常、文本文件处理)_01

    01_error接口的使用.go 02_error接口应用.go 03_显式调用panic函数.go 04_数组越...

  • Go语言 函数

    函数的一般结构组成如下所示 比如下面这个返回int类型的函数 函数的多返回值 关于函数的返回值命名Go语言中,返回...

  • 九.Go函数func

    函数 Go函数不支持 嵌套、重载、默认参数 支持特性:无需声明原型、不定长度参数、多返回值、命名返回值参数、匿名函...

  • Go语言基础——函数

    Go函数的特性 不支持:嵌套、函数重载、默认值参数支持:可变变参、多返回值、命名返回值参数、匿名函数、闭包特别注意...

  • 闭包函数

    一个函数内部可以定义一个函数,并且函数的返回值是这个内部函数,内部函数使用了原函数的内部变量。返回内部函数时,内部...

  • python函数闭包

    示例: 内部函数使用外部函数变量外部函数返回值必须是内部函数make_power(2)(3) 使用这个方法调用就得...

  • 20年第35周:go defer,panic,recover,异

    go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 一、go的d...

网友评论

      本文标题:Go使用命名返回值捕获内部函数的panic

      本文链接:https://www.haomeiwen.com/subject/szdttftx.html