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("其它美好功能...")
}