【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
}
相關文章
相關標籤/搜索