? ? ? ? 錯誤:
? ? ? ? ? ? ? ? 創建錯誤
? ? ? ? ? ? ? ? ? ? ? ? 1)fmt包下提供的方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fmt.Errorf(" 格式化字符串信息?"? , 空接口類型對象 )
? ? ? ? ? ? ? ? ? ? ? ? 2)errors包下提供的方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errors.New(" 字符串信息 ")
? ? ? ? ?創建自定義錯誤
? ? ? ? ? ? ? ? 需要實現error接口,而error接口只包含一個方法Error(),實現該方法就實現error接口。
? ? ? ? ? ? 這里 用*areaError來接收方法Error(),表明指針areaError類型實現error接口。
? ? ? ? ? ? circleArea()方法返回錯誤類型對象為? &areaError{ }? ??
? ? ? ? ? ? ?rectArea()方法返回錯誤類型對象為?? &areaError{ }? ??
? ? ? ? ? ? ? 在main()方法中使用斷言??
? ? ? ? ? ? ? ? ? ? ?_,? err :=? ?rectArea()?
? ? ? ? ? ? ? ? ? ? ?if areaErrorPointerObj,judgeValue=? err.(*areaError)? ;? judgeValue{ }
?
?????????defer(),panic(),recover()
? ? ? ? panic()會中斷程序執行,從運行到panic此處時,后面所有的代碼都不在執行。
???????????????除了延遲函數defer(),defer()調用在panic()之前時,會在程序中斷時仍然最后執行。這是程序在panic()后唯一能繼續運行的救命稻草,那就是在defer()中使用recover()恢復程序運行。并且recover( )返回值會攜帶panic(參數)函數中的參數信息? ? ? ??