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

相关推荐
晚风残1 分钟前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer
满天星830357716 分钟前
【C++】AVL树的模拟实现
开发语言·c++·算法·stl
weixin_4569042734 分钟前
基于.NET Framework 4.0的串口通信
开发语言·c#·.net
ss27337 分钟前
手写MyBatis第107弹:@MapperScan原理与SqlSessionTemplate线程安全机制
java·开发语言·后端·mybatis
麦麦鸡腿堡1 小时前
Java的动态绑定机制(重要)
java·开发语言·算法
时间之里1 小时前
【c++】:Lambda 表达式介绍和使用
开发语言·c++
Tiger_shl2 小时前
C# 预处理指令 (# 指令) 详解
开发语言·c#
@Kerry~2 小时前
phpstudy .htaccess 文件内容
java·开发语言·前端
CRMEB系统商城2 小时前
CRMEB多商户系统(PHP)v3.3正式发布,同城配送上线[特殊字符]
java·开发语言·小程序·php
sali-tec3 小时前
C# 基于halcon的视觉工作流-章45-网格面划痕
开发语言·算法·计算机视觉·c#