Heim > Artikel > Backend-Entwicklung > Wie kann die Dauer in Tagen angegeben werden, damit die Golang-Viper-Konfiguration fehlerfrei geladen werden kann?
我在 .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
Das obige ist der detaillierte Inhalt vonWie kann die Dauer in Tagen angegeben werden, damit die Golang-Viper-Konfiguration fehlerfrei geladen werden kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!