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

相关推荐
fengkai45452 小时前
七、华为云网络类 + 计算类云服务实验总结
开发语言·php
神明不懂浪漫2 小时前
【第四章】索引——B+树、回表,加快数据库的查找能力的利器
开发语言·数据结构·数据库·经验分享·笔记·b树
博、、2 小时前
全民健身解决方案系统源码实战指南:从架构设计到部署全流程解析
开发语言·需求分析
liuze4082 小时前
安装boss-zhipin-mcp(招聘)
开发语言·python
博、、2 小时前
智慧场馆解决方案系统开发实战:从架构设计到落地指南
开发语言·需求分析
二十雨辰2 小时前
[Java]-场景题
java·开发语言
geovindu3 小时前
java:Observer Pattern
java·开发语言·后端·观察者模式·设计模式·行为模式
Am-Chestnuts3 小时前
通义千问任务清单怎么导出Word?用DS随心转保留层级和勾选项
开发语言·c#·word
liliangcsdn3 小时前
基于信号强度的稀疏选股算法的探索分析
开发语言·python
大树913 小时前
把 Java 项目从手动 SCP 升级到 Gitee Go 自动部署:一份踩坑实录
java·golang·gitee