普通錯誤處理
// 包路徑
package mainimport ("errors""fmt"
)func sqrt(f1, f2 float64) (float64, error) {if f2 < 0 {return 0, errors.New("error: f2 < 0")}return f1 / f2, nil
}func sqrt1(f1, f2 float64) {if re, err := sqrt(f1, f2); err == nil {fmt.Println("計算沒有錯誤,結果為:", re)} else {fmt.Println("計算發生錯誤,錯誤信息為:", err)}
}// main方法
func main() {// 錯誤機制是利用多個返回值機制實現// 計算沒有錯誤,結果為: 1sqrt1(1.1, 1.1)// 計算發生錯誤,錯誤信息為: error: f2 < 0sqrt1(1.1, -1.1)}
自定義error
package mainimport ("log"
)// 自定義異常類型
type CustomerDefinitionError struct {message string
}// 實現Error方法,用來標記是自定義錯誤
// err CustomerDefinitionError 只讀err
// err *CustomerDefinitionError 可以修改err
func (err *CustomerDefinitionError) Error() string {return err.message
}// 注意拋出方法
func throwUDError() error {return &CustomerDefinitionError{"錯誤信息!!!"}
}func main() {log.Println("main ...")err := throwUDError()log.Println(err.Error())// 類型的判斷if pathErr, ok := err.(*CustomerDefinitionError); ok {log.Println("This is user definition error", pathErr)}switch vt := err.(type) {case *CustomerDefinitionError:log.Println("This is user definition error", vt)default:log.Println("other type error")}log.Println("success ..")
}