您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在恐慌的Go函数中返回值?

如何在恐慌的Go函数中返回值?

您可以使用命名结果参数。命名您的返回值,并在检测到紧急情况时在延迟函数中更改返回“变量”的值。更改后的新值将被返回。

例:

func main() {
    fmt.Println("Returned:", MyFunc())
}

func MyFunc() (ret string) {
    defer func() {
        if r := recover(); r != nil {
            ret = fmt.Sprintf("was panic, recovered value: %v", r)
        }
    }()
    panic("test")
    return "Normal Return Value"
}

输出(在Go Playground上尝试):

Returned: was panic, recovered value: test

提到了这一点:

例如,如果延迟函数函数文字,并且周围函数命名结果参数文字范围内,则延迟函数可以在返回结果参数之前对其进行访问和修改

博客文章 也提到了这一点:

延迟函数可以读取并分配给返回函数的命名返回值。

如果出现doParse紧急情况,恢复块会将返回值设置为— nil延迟函数可以修改命名的返回值。

Go 2022/1/1 18:13:46 有533人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶