使用recover()捕捉panic时,只能捕捉直接调用的方法,通过go命令调用的代码块中抛出的panic,则无法捕捉
package main import ( "fmt" "errors" ) func main() { fmt.Println("Enter function main.") defer func(){ fmt.Println("Enter defer function.") if p := recover(); p != nil { fmt.Printf("panic: %s\n", p) } fmt.Println("Exit defer function.") }() // 引发 panic。 go func() { panic(errors.New("something wrong")) }() fmt.Println("Exit function main.") }