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

相关推荐
代码游侠11 分钟前
C语言核心概念复习(一)
c语言·开发语言·c++·笔记·学习
蜕变的土豆16 分钟前
grpc-通关速成
开发语言·c++
-To be number.wan16 分钟前
Python数据分析:英国电商销售数据实战
开发语言·python·数据分析
xb113227 分钟前
C#生产者-消费者模式
开发语言·c#
电商API&Tina28 分钟前
乐天平台 (Rakuten) 数据采集指南
大数据·开发语言·数据库·oracle·json
zhougl9961 小时前
Java内部类详解
java·开发语言
Grassto1 小时前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
代码游侠1 小时前
学习笔记——Linux内核与嵌入式开发3
开发语言·arm开发·c++·学习
怎么没有名字注册了啊1 小时前
C++ 进制转换
开发语言·c++
代码游侠1 小时前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法