标准答案
- 超时和重试使用 duration 或单调时钟语义,不应把格式化字符串当计时器。
- 存储和传输时间要明确 UTC、时区、精度和夏令时规则。
- 时间戳来自客户端时要校验范围和时钟偏差,不能直接作为权限或顺序唯一依据。
- 定时任务要明确时区、错过执行、重复执行和夏令时策略。
题目解析
time.Time 可以携带时区和单调时钟信息,但序列化后单调部分不会跨进程传递。持续时间应使用 deadline/context 和 duration,业务事件时间要明确 UTC、时区和精度。
客户端时间可能漂移或被篡改,只能作为输入或展示;审计和顺序应使用服务端接收/提交时间、数据库版本或领域序列。定时任务要明确 IANA 时区和夏令时。
格式统一不代表语义统一:绝对时刻、墙上时间、日期和持续时间要使用不同字段和契约,并测试跨时区、夏令时和精度截断。
常见误区
- 误区:用本地时间比较跨地域事件。改正:使用带明确时区的绝对时刻或领域序列。
- 误区:用 time.Sleep 代替 deadline。改正:使用 context.WithTimeout,并在取消后释放资源。
- 误区:把客户端时间当可信审计时间。改正:记录服务端接收/提交时间,客户端时间只作辅助信息。