课程进度 49% · 第12/23章第12/23章 · 标签 1/4
— 1 —
错误处理基础
Go语言采用多返回值方式进行错误处理,约定error类型为错误信息。
go
1
import "errors"
2
3
func div(a, b int) (int, error) {
4
if b == 0 {
5
return 0, errors.New("除数不能为0")
6
}
7
return a / b, nil
8
}
9
10
res, err := div(10, 0)
11
if err != nil {
12
fmt.Println("出错:", err)
13
} else {
14
fmt.Println("结果:", res)
15
}
- error是接口类型,nil表示无错误
- Go推荐优先返回错误而不是抛出异常
— 2 —
自定义错误
可通过实现error接口自定义错误类型,便于携带更多上下文信息。
go
1
type MyError struct {
2
Code int
3
Msg string
4
}
5
6
func (e *MyError) Error() string {
7
return fmt.Sprintf("[错误码%d] %s", e.Code, e.Msg)
8
}
9
10
func test(flag bool) error {
11
if !flag {
12
return &MyError{Code: 1001, Msg: "flag为false"}
13
}
14
return nil
15
}
16
17
err := test(false)
18
if err != nil {
19
fmt.Println(err)
20
}
- 自定义错误可携带错误码、上下文等信息
- 可通过类型断言判断错误类型
errorerrors.NewMyError自定义错误接口