github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/coding/errors/unwrap.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 ) 7 8 func main() { 9 e := Unwrap{ 10 msg: "msg", 11 err: errors.New("error for unwrap"), 12 } 13 fmt.Println(errors.Unwrap(e)) 14 // prefix:abc, error:error for unwrap 15 // 可以看到这里返回的是Unwrap 自定义的Unwrap 函数的修改的错误值 16 // 这种修改 可以通过errors.Unwrap 无缝调用 17 } 18 19 type Unwrap struct { 20 msg string 21 err error 22 } 23 24 func (e Unwrap) Error() string { 25 return e.msg 26 } 27 28 // 可以自定义错误, 也可以就自定义错误结果Unwrap 返回原始错误err 29 func (e Unwrap) Unwrap() error { 30 // return e.err 31 return fmt.Errorf("prefix:abc, error:%v", e.err) 32 }