【Go】在 JSON 中解析 time.Duration

当解析 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' 进行检查。

相关推荐
科技资讯早知道2 分钟前
java计算机毕设课设—坦克大战游戏
java·开发语言·游戏·毕业设计·课程设计·毕设
白拾12 分钟前
使用Conda管理python环境的指南
开发语言·python·conda
从0至138 分钟前
力扣刷题 | 两数之和
c语言·开发语言
总裁余(余登武)38 分钟前
算法竞赛(Python)-万变中的不变“随机算法”
开发语言·python·算法
NormalConfidence_Man39 分钟前
C++新特性汇总
开发语言·c++
一个闪现必杀技1 小时前
Python练习2
开发语言·python
有梦想的咕噜1 小时前
target_link_libraries()
开发语言
liu_chunhai1 小时前
设计模式(3)builder
java·开发语言·设计模式
姜学迁1 小时前
Rust-枚举
开发语言·后端·rust
冷白白1 小时前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法