Package errors

import "errors"
Overview
Index
Examples

Overview ▾

包错误实现了处理错误的功能.

新建功能会创建仅包含文本消息的错误.

Unwrap,Is和As函数可处理可能会包装其他错误的错误. 如果错误的类型具有方法,则该错误将包装另一个错误

Unwrap() error

如果e.Unwrap()返回非零错误w,那么我们说e包装了w.

解包解包错误. 如果其参数的类型具有Unwrap方法,则将调用该方法一次. 否则,它返回nil.

创建包装错误的一种简单方法是调用fmt.Errorf并将%w动词应用于error参数:

errors.Unwrap(fmt.Errorf("... %w ...", ..., err, ...))

返回err.

是按顺序展开其第一个参数以寻找与第二个参数匹配的错误. 它报告是否找到匹配项. 它应优先于简单的相等性检查使用:

if errors.Is(err, os.ErrExist)

优于

if err == os.ErrExist

因为如果err包装os.ErrExist,前者将成功.

当按顺序解包其第一个参数时,查找可以分配给其第二个参数的错误,该错误必须是一个指针. 如果成功,它将执行分配并返回true. 否则,它返回false. 表格

var perr *os.PathError
if errors.As(err, &perr) {
	fmt.Println(perr.Path)
}

优于

if perr, ok := err.(*os.PathError); ok {
	fmt.Println(perr.Path)
}

因为如果err包装* os.PathError,前者将成功.

Example

1989-03-15 22:30:00 +0000 UTC: the file system has gone away

func As 1.13

func As(err error, target interface{}) bool

As在err链中找到与目标匹配的第一个错误,如果匹配,则将target设置为该错误值并返回true.

该链由err本身组成,其后是通过重复调用Unwrap获得的错误序列.

如果错误的具体值可分配给目标指向的值,或者错误具有方法As(interface {})bool使得As(target)返回true,则错误与目标匹配. 在后一种情况下,As方法负责设置目标.

如果target不是实现错误的类型或任何接口类型的非nil指针,也会感到恐慌. 如果err为nil,则返回false.

Example

Failed at path: non-existing

func Is 1.13

func Is(err, target error) bool

是报告err链中的任何错误是否与目标匹配.

该链由err本身组成,其后是通过重复调用Unwrap获得的错误序列.

如果错误等于目标,或者它实现了Is(error)bool使得Is(target)返回true,则认为该错误与该目标匹配.

func New

func New(text string) error

New返回一个错误,该错误的格式为给定的文本. 即使文本相同,每次对New的调用也会返回一个不同的错误值.

Example

emit macho dwarf: elf header corrupted

示例(Errorf)

fmt软件包的Errorf函数使我们能够使用软件包的格式化功能来创建描述性错误消息.

user "bimmler" (id 17) not found

func Unwrap 1.13

func Unwrap(err error) error

如果err的类型包含返回错误的Unwrap方法,则Unwrap返回对err调用Unwrap方法的结果. 否则,Unwrap返回nil.

by  ICOPY.SITE