我是Golang的新手。我遇到了以下代码,这些代码使用包装器管理从紧急情况中恢复的情况。我知道恐慌不会在goroutine中传播,它们必须独立管理,因此需要在发生恐慌的goroutine中对其进行处理。
package main
import (
"fmt"
"time"
)
func main() {
go Wrap(test)()
time.Sleep(time.Second)
fmt.Println("HELLO")
}
func test() {
panic("PANIC")
}
func Wrap(f func()) func() {
return func() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("RECOVERED - %v\r\n",r)
}
}()
f()
}
}
func WrapWithSignal(f func(chan bool),signal chan bool) func() {
return func() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("RECOVERED - %v\r\n",r)
signal <- false
}
}()
f(signal)
}
}
1)WrapWithSignal
函数的用途是什么,如何使用?
2)还有另一种包装函数以便恢复的方法,这种方法不太冗长?