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

相关推荐
许彰午5 分钟前
17_synchronized关键字深度解析
java·开发语言
z落落10 分钟前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊19 分钟前
【Rust】02-变量、不可变性与基础类型
开发语言·后端·rust
阿正的梦工坊29 分钟前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience34 分钟前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#
张忠琳38 分钟前
【Go 1.26.4】(Part 1) Go 1.26.4 超深度源码分析 — 总体架构与模块全景
开发语言·golang
guygg8842 分钟前
C# 生成中间带 Logo 头像的二维码
开发语言·c#
闪电悠米44 分钟前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
8125035331 小时前
第 9 篇:子网掩码:如何划分“小区”
开发语言·php
Jun6261 小时前
QT(12)-制作lib库
开发语言·qt