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  }