gpt4 book ai didi

go - 是否有可能从 panic 中的 panic 中恢复过来?

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:50 25 4
gpt4 key购买 nike

看起来不可能从 panic 中的 panic 中恢复过来?

func TestError(t *testing.T) {

e := &myErr{p: false}
fmt.Println(e.Error()) // this prints "returned"
panic(e) // this prints "panic: returned"

e1 := &myErr{p: true}
fmt.Println(e1.Error()) // this prints "recovered"
panic(e1) // this prints "panic: panic: paniced
// fatal error: panic holding locks
// panic during panic"
}

type myErr struct {
p bool
}

func (m *myErr) Error() (out string) {
defer func() {
if r := recover(); r != nil {
out = "recovered"
}
}()
if m.p {
panic("paniced")
}
return "returned"
}

背景:我的错误 Error() 函数使用了 os.Getwd,在 panic 中似乎总是 panic,所以我想优雅地处理它。

最佳答案

我认为替换它可以解决您的问题

panic(e1)

由此

panic(e1.Error())

Playground :http://play.golang.org/p/fXpX2ch9eF

这里的问题很有趣:为什么?这是困难的部分,我不知道确切的答案。可能这里的问题是我们在执行所有延迟函数后 panic (所以当 Go 确实尝试打印 panic 错误字符串时)。不对的地方欢迎指正!

关于go - 是否有可能从 panic 中的 panic 中恢复过来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34824934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com