## 一、实例
~~~
package main
import "fmt"
type DirErr struct {
desc string
}
func (err *DirErr) err() string {
return fmt.Sprintf("错误类型:%s", err.desc)
}
func fun01(a, b int) (max int, err string) {
if a < 0 {
DirErr := DirErr{desc: "a不能小于0"}
err = DirErr.err()
return
}
if b < 0 {
DirErr := DirErr{desc: "b不能小于0"}
err = DirErr.err()
return
}
if a > b {
max = a
} else {
max = b
}
return max, ""
}
func main() {
// 1、数据正确的情况下
var a int = 10
var b int = 20
v, err := fun01(a, b)
if err != "" {
fmt.Println(err)
} else {
fmt.Println("最大值为:", v)
}
// 2、数据错误的情况下
var c int = 10
var d int = -2
v2, err2 := fun01(c, d)
if err2 != "" {
fmt.Println(err2)
} else {
fmt.Println("最大值为:", v2)
}
}
~~~
执行结果:
最大值为: 20
错误类型:b不能小于0
## 二、实例
1、 defer+recover机制处理错误
![](https://img.kancloud.cn/55/c5/55c52dbba732a6107200cd33148dde46_689x457.png)
2、 自定义错误
自定义错误:需要调用errors包下的New函数:函数返回error类型
![](https://img.kancloud.cn/45/12/4512010e716d73e4b0b9724752c8fa3d_689x493.png)
有一种情况:程序出现错误以后,后续代码就没有必要执行,想让程序中断,退出程序:
借助:builtin包下内置函数:panic
![](https://img.kancloud.cn/7a/ee/7aee0f4dea9fe08060f6816ea653a4da_689x162.png)
![](https://img.kancloud.cn/4b/d6/4bd6d043524d256f8313fae52fbede5a_689x448.png)