首頁  >  文章  >  後端開發  >  如何提及以天為單位的持續時間,以便可以毫無錯誤地載入 golang viper 配置?

如何提及以天為單位的持續時間,以便可以毫無錯誤地載入 golang viper 配置?

PHPz
PHPz轉載
2024-02-12 16:30:07795瀏覽

如何提及以天为单位的持续时间,以便可以毫无错误地加载 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 配置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除