package main import ( "fmt" "math" ) /*自己报出恐慌的语法*/ func main021() { fmt.Println(123) panic("恐慌的原因") fmt.Println(456) } /* 圆的面积公式 如果用户输入一个负数半径,panic */ func GetCircleArea(radius float64) float64 { //如果用户输入一个负数半径,panic if radius < 0{ // 本行代码会导致程序崩溃——提示代码调用者,半径不能为负数 panic("傻鸟半径不能为负数!") } return math.Pi * radius * radius } /*因panic而死(程序闪退)*/ func main022() { fmt.Println(GetCircleArea(5)) fmt.Println(GetCircleArea(-5)) } func main() { /* 不管函数是正常返回,还是异常返回 defer所引导的代码,都一定会得到执行 */ defer func() { // 如果程序曾经因panic而崩溃过,recover可以是程序“复活”,并返回panic的原因 err := recover() // 如果err不为空,就说明确实曾经因panic而崩溃过 if err != nil{ //处理致死的原因 fmt.Println("致死的原因是",err) fmt.Println("偷偷地将错误原因上传后台") }else{ fmt.Println("正序正常结束") } }() fmt.Println(GetCircleArea(5)) // 调用时使用负数半径,触发了panic,程序挂掉在当前行,当前函数会异常“返回” fmt.Println(GetCircleArea(-5)) // 当前前面有代码panic时,本行以后的代码执行不到 fmt.Println("其它美好功能...") }