【Golang源码阅读】errors/errors.go

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// errors包实现了操做错误的函数。
//
// New 函数建立错误,其惟一内容是文本消息。
//
// Unwrap、Is 和 As 函数处理可能会包装其余错误的错误。
// 若是错误类型具备方法,则错误会包装另外一个错误
//
//	Unwrap() error
//
// 若是 e.Unwrap() 返回一个非零错误 w,那么咱们说 e 包装了 w。
//
// Unwrap 解包包装的错误。 若是它的参数类型有一个 Unwrap 方法,它会调用该方法一次。 不然,它返回零。
//
// A simple way to create wrapped errors is to call fmt.Errorf and apply the %w verb to the error argument:
//
//	errors.Unwrap(fmt.Errorf("... %w ...", ..., err, ...))
//
// returns err.
//
// 是按顺序展开其第一个参数以查找与第二个参数匹配的错误。 它报告是否找到匹配项。 它应该优先于简单的相等性检查:
//
//	if errors.Is(err, fs.ErrExist)
//
// 更可取
//
//	if err == fs.ErrExist
//
// 由于若是 err 包装 fs.ErrExist,前者会成功。
//
// As 依次展开它的第一个参数,查找能够分配给它的第二个参数的错误,该参数必须是一个指针。 若是成功,则执行赋值并返回 true。 不然,它返回 false。
//
//	var perr *fs.PathError
//	if errors.As(err, &perr) {
//		fmt.Println(perr.Path)
//	}
//
// 更可取
//
//	if perr, ok := err.(*fs.PathError); ok {
//		fmt.Println(perr.Path)
//	}
//
// 由于若是 err 包装了 *fs.PathError,前者会成功。
package errors

// New 返回格式化为给定文本的错误。
// 即便文本相同,每次调用 New 也会返回一个不一样的错误值。
func New(text string) error {
	return &errorString{text}
}

// errorString 是一个简单的 error 实现。
type errorString struct {
	s string
}

func (e *errorString) Error() string {
	return e.s
}
相关文章
相关标签/搜索