跳到主要内容

error 包装与检查

包装错误

概念

  • fmt.Errorf: 格式化并创建错误;
  • %w: 包装原始错误并保留错误链;
import "fmt"

func load() error {
if err := read(); err != nil {
return fmt.Errorf("read config: %w", err)
}
return nil
}

判断错误

概念

  • errors.Is: 判断错误链中是否存在目标错误;
if errors.Is(err, os.ErrNotExist) {
return nil
}

提取错误类型

概念

  • errors.As: 从错误链中提取可赋值给目标类型的错误;
var pathErr *os.PathError
if errors.As(err, &pathErr) {
println(pathErr.Path)
}

检查方式

目标API
保留原始错误链fmt.Errorf%w
判断是否包含目标错误errors.Is
提取具体错误类型errors.As