渐进式编程课
Go 目录
第 17 课2026.09.22

让多次校验失败共享同一个错误身份,便于后续识别。

第 17 课:定义可复用的校验错误

  • 日期:2026-09-22
  • 课程序号:第 17 课
  • 知识点:errors.New 与哨兵错误

用途或适用场景

让多次校验失败共享同一个错误身份,便于后续识别。

核心概念

每次调用 errors.New 都产生不同错误值;把它保存为包级变量即可复用同一个身份。本课暂不包装上下文,下一课再结合 %w。

最小代码或操作示例

go
package main

import (
    "errors"
    "fmt"
)

var errMinutes = errors.New("minutes must be positive")
func validate(minutes int) error {
    if minutes <= 0 { return errMinutes }
    return nil
}
func main() {
    fmt.Println(validate(0) == errMinutes) // true
}

3~5 分钟练习

比较 validate(-3) 与 errMinutes 的身份。

参考答案

validate(-3) == errMinutes 为 true;函数返回同一个错误值。

与上一课的联系

沿用第 16 课的 validate(minutes) 和 error 返回值;本课只把失败原因提取为可复用的 errMinutes,暂不附加输入值;完成后下一课可用 %w 重新加入上下文且保留错误身份。

时效校验

时效校验:2026-09-24(Go 标准库 errors.New 与 fmt 官方文档;errors.New 未见废弃标记,最小示例不依赖新版本特性)。

官方参考