导航菜单

Go语言/错误处理
课程进度 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自定义错误接口