我在 .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 配置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!