您可以使用命名结果参数。命名您的返回值,并在检测到紧急情况时在延迟函数中更改返回“变量”的值。更改后的新值将被返回。
例:
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
例如,如果延迟函数是函数文字,并且周围函数已命名结果参数在文字范围内,则延迟函数可以在返回结果参数之前对其进行访问和修改。