golang的错误捕获 使用panic 和 defer 联合使用可以很棒的捕获错误信息并进行自己想要的处理
- recover 只能捕获函数本身的错误信息,不能跨函数进行捕获错误信息
- panic 的错误进行捕获并处理不会导致主函数的终止,否则会导致主函数的错误退出
package main
import (
"fmt"
"os"
"os/signal"
"time"
)
var err interface{}
func main() {
defer func() {
if err=recover();err != nil {
fmt.Println("main ==》 ",err)
}
}()
interrupt := make(chan os.Signal)
signal.Notify(interrupt, os.Interrupt)
var i int = 0
for {
i++
select {
case <-time.After(time.Second):
go test(i)
case <-interrupt:
panic("终止")
return
}
}
}
func test(i int) {
defer func() {
if err = recover(); err != nil {
fmt.Println("test==>", err)
}
}()
if i == 10 || i == 20 {
panic("终止test")
}
fmt.Println("结果==》 ",i)
}