1
2
3
| type error interface {
Error() string
}
|
一、常见的使用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| func add(a, b int) (int, error) {
if a < 0 || b < 0 {
return 0, errors.New("传入参数不能为负数")
}
return a + b, nil
}
func main() {
sum, err := add(1, -2)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(sum)
}
}
|
二、Error Wrapping
1
2
3
4
5
6
| func main() {
e := errors.New("原始error")
e1 := fmt.Errorf("Wrap一个error:%w", e)
fmt.Println(e1) // Wrap一个error:原始error
}
|
使用这种方式可以对原有的error进行修饰
errors.Unwrap(e error) 可以获取被嵌套的error
1
2
3
4
5
6
7
| func main() {
e := errors.New("原始error")
e1 := fmt.Errorf("Wrap一个error:%w", e)
e2 := errors.Unwrap(e1)
fmt.Println(e2) //原始error
}
|
errors.IS(e1,e2 error) 可以判断被嵌套的error是不是原有的error
1
2
3
4
5
6
7
8
| func main() {
e := errors.New("原始error")
e1 := fmt.Errorf("Wrap一个error:%w", e)
fmt.Println(errors.Is(e, e1)) //false
e2 := fmt.Errorf("又Wrap一个error:%w", e1)
fmt.Println(errors.Is(e2, e1)) //true
fmt.Println(errors.Is(e2, e)) //true
}
|