第 20 课2026.09.28
分别提示“非正数”和“超过上限”的练习时长。
第 20 课:区分两类时长校验错误
- 日期:2026-09-28
- 课程序号:第 20 课
- 知识点:为第二类失败定义独立错误身份
用途或适用场景
分别提示“非正数”和“超过上限”的练习时长。
核心概念
为上限错误添加独立 sentinel,并继续用 %w 包装、errors.Is 分支;不解析错误字符串。需要 Go 1.13 或更新版本。
最小代码或操作示例
go
package main
import (
"errors"
"fmt"
)
var errMinutes = errors.New("minutes must be positive")
var errTooLong = errors.New("minutes must be at most 60")
func validate(minutes int) error {
if minutes <= 0 { return fmt.Errorf("minutes=%d: %w", minutes, errMinutes) }
if minutes > 60 { return fmt.Errorf("minutes=%d: %w", minutes, errTooLong) }
return nil
}
func main() {
err := validate(90)
if errors.Is(err, errMinutes) { fmt.Println("请输入正数分钟") }
if errors.Is(err, errTooLong) { fmt.Println("最多 60 分钟") }
}3~5 分钟练习
分别用 -3、5 调用 validate,观察提示。
参考答案
-3 只输出“请输入正数分钟”;5 不输出任何错误提示。
与上一课的联系
沿用第 19 课的 errMinutes、validate、%w 与 errors.Is;本课只新增第二种错误身份和对应分支;下一课可把两种错误提示封装成一个显示函数。
时效校验
时效校验:2026-09-28(已打开 Go 当前标准库 errors.Is 与 fmt.Errorf 文档;包装与身份匹配自 Go 1.13 可用,未见废弃标记)。