【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' 进行检查。

相关推荐
泡海椒3 分钟前
JQuick-Excel 字段映射实战:用 MAPPING 固化 Excel 表头与业务字段契约
xml·java·开发语言·excel
lcj25115 分钟前
【C++】set和map——详细使用说明
开发语言·c++·笔记·面试
潼心1412o6 分钟前
C++初阶(长期更新)第3讲:类和对象(中)
开发语言·c++
外收内放16 分钟前
Python基础语法练习题(40-42)
开发语言·python
程序喵大人24 分钟前
【C++入门】编译链接模型 - 02 预处理把头文件怎样塞进源文件
开发语言·c++·预处理·编译链接·头文件·源文件
茉莉玫瑰花茶30 分钟前
GO [ 并发 · 调度器 ]
开发语言·后端·golang
zhangzeyuaaa30 分钟前
深入理解 Ruby 可变对象与不可变对象的原理、坑点与最佳实践
开发语言·后端·ruby
恋喵大鲤鱼34 分钟前
go list command
golang·list
新鲜势力呀1 小时前
PHP 实战:第三方接口经常超时怎么办?从API调用优化到服务稳定性完整方案
开发语言·php