恐慌情绪似乎无法从恐慌中恢复过来?
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"
}
Backstory:我的错误Error()函数使用os.Getwd,在恐慌中似乎总是恐慌,所以我想优雅地处理它。
答案 0 :(得分:0)
我认为它可以解决您的问题,以替换此
panic(e1)
由此
panic(e1.Error())
游乐场:http://play.golang.org/p/fXpX2ch9eF
这里的问题很有意思:为什么?这是困难的部分,我不知道确切的答案。可能这里的问题是我们在执行了所有被保护的函数后进行惊慌(所以当Go确实尝试打印恐慌错误字符串时)。如果不正确,欢迎任何更正!