@@ -12,6 +12,10 @@ type wrapError struct {
1212 msg string
1313}
1414
15+ // Wrap 包装一个错误,这个辅助 wrap 实现错误包装使用的
16+ // 当被包装的 err 为 nil 时会返回自身
17+ // 当首次被包装且 err 为 Errno 实现,这不设置错误消息
18+ // 使用 `old err, new err` 格式存储错误信息
1519func (w * wrapError ) Wrap (err error ) * wrapError {
1620 if err == nil {
1721 return w
@@ -34,13 +38,16 @@ func (w *wrapError) Wrap(err error) *wrapError {
3438 return & wrapError {old : w , new : err , msg : msg }
3539}
3640
41+ // Error 响应一个被格式化的错误文本,这是 error 接口的实现
3742func (w * wrapError ) Error () string {
3843 if w == nil {
3944 return ""
4045 }
4146 return w .msg
4247}
4348
49+ // Is 这是 errors.Is 接口实现,可以通过 errors.Is 函数判断是否包含某个具体的错误
50+ // 更详细的细节请浏览 errors.Is 文档
4451func (w * wrapError ) Is (target error ) bool {
4552 if w == target {
4653 return true
@@ -56,6 +63,8 @@ func (w *wrapError) Is(target error) bool {
5663 return false
5764}
5865
66+ // As 这是 errors.As 接口实现,可以通过 errors.As 函数判断是否包含某个类型的错误,并把发现的第一个错误赋值给 target
67+ // 更详细的细节请浏览 errors.As 文档
5968func (w * wrapError ) As (target interface {}) bool {
6069 for w != nil {
6170 if errors .As (w .new , target ) {
@@ -68,6 +77,10 @@ func (w *wrapError) As(target interface{}) bool {
6877 return false
6978}
7079
80+ // Unwrap 返回最后被包装的错误
81+ // 这并不是 errors 中的 Unwrap 接口实现,而且用来获取最后绑定的错误
82+ // 如果需要判断是否包含某个错误请使用 errors.Is
83+ // 如果判断是否包含的某种类型的错误,请使用 errors.As
7184func (w * wrapError ) Unwrap () error {
7285 if w == nil {
7386 return nil
0 commit comments