github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/coding/errors/wrapis.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 ) 7 8 // 对外的错误定义 9 var ErrC1 = errors.New("errors custom 1") 10 var ErrC2 = errors.New("errors custom 2") 11 12 // 定义错误 13 type errorNR string 14 15 // 内部业务错误定义 16 var ERR1 errorNR = "error 1" 17 var ERR2 errorNR = "error 2" 18 19 // 可以通过自定义错误Is 函数 来为外部提供错误比较对 20 // 而外部调用的是errors.Is() 方法 21 func (e errorNR) Is(target error) bool { 22 switch target { 23 case ErrC1: 24 return e == ERR1 25 case ErrC2: 26 return e == ERR2 27 default: 28 return false 29 } 30 } 31 32 // 实现error 接口 33 func (e errorNR) Error() string { 34 return string(e) 35 } 36 37 func Error01() error { 38 return ERR1 39 } 40 func Error02() error { 41 return ERR2 42 } 43 44 func main() { 45 e01 := Error01() 46 if errors.Is(e01, ErrC1) { 47 fmt.Println("e01:", e01) 48 } 49 e02 := Error02() 50 if errors.Is(e02, ErrC2) { 51 fmt.Println("e02:", e02) 52 } 53 } 54 55 /* 56 output 57 e01: error 1 58 e02: error 2 59 */