当解析 JSON
时,使用time.Duration
可能是一个繁琐的过程,因为它需要在一秒的后面添加 9 个零(即 1000000000)。为了简化这个过程,我创建了一个名为 Duration
的新类型:
go
type Duration time.Duration
为了将字符串(如 "1s" 或 "20h5m")
解析为 int64 类型
的持续时间,我还为这个新类型实现了自定义的解析逻辑:
go
func (d *Duration) UnmarshalJSON(b []byte) error {
var s string
if err := json.Unmarshal(b, &s); err != nil {
return err
}
dur, err := time.ParseDuration(s)
if err != nil {
return err
}
*d = Duration(dur)
return nil
}
需要注意的是, 变量 'd' 不应为 nil
,否则可能会导致编组错误。或者,你还可以在函数开头对 'd' 进行检查。