普通错误处理
// 包路径
package main
import (
"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() {
// 错误机制是利用多个返回值机制实现
// 计算没有错误,结果为: 1
sqrt1(1.1, 1.1)
// 计算发生错误,错误信息为: error: f2 < 0
sqrt1(1.1, -1.1)
}
自定义error
package main
import (
"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 ..")
}