登录
首页 >  Golang >  Go问答

准确加载golang viper配置文件需要如何指定以天为单位的持续时间?

来源:stackoverflow

时间:2024-02-10 17:45:24 321浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《准确加载golang viper配置文件需要如何指定以天为单位的持续时间?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我在 .env 文件中有两个配置,如下

max_token_expiry_days=30d
access_token_duration=30m

golang 中用于加载配置的结构如下所示

type appconfig struct {
    maxtokenexpiry      time.duration `mapstructure:"max_token_expiry_days"`
    accesstokenduration time.duration `mapstructure:"access_token_duration"`
}

现在,当我尝试加载配置时,出现以下错误

* error decoding 'max_token_expiry_days': time: unknown unit "d" in duration "30d"

这可能意味着问题出在 max_token_expiry_days=30d 行,因为它无法识别 d 标签。但是 access_token_duration=30m 中的 m 标签与 time 运行良好。golang 中的 duration 能够很好地解析它。

在时间包源代码中,我看到以下结构

Nanosecond  Duration = 1
Microsecond          = 1000 * Nanosecond
Millisecond          = 1000 * Microsecond
Second               = 1000 * Millisecond
Minute               = 60 * Second
Hour                 = 60 * Minute

有什么方法可以在配置中表示天数吗?


正确答案


这是因为在你的时间字符串上调用的ParseDuration不支持d作为一个单位后缀

有效的时间单位为“ns”、“us”(或“μs”)、“ms”、“s”、“m”、“h”。

您最好使用 30d 的小时数,即 720h 来解决歧义。

另请参阅 golang/go 中的问题/解释,了解为什么语言设计者决定使用选择。 为什么 time.ParseDuration() 不支持天数? #17767

好了,本文到此结束,带大家了解了《准确加载golang viper配置文件需要如何指定以天为单位的持续时间?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>