首頁 > 後端開發 > Golang > 主體

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

PHPz
發布: 2024-02-12 16:30:07
轉載
778 人瀏覽過

如何提及以天为单位的持续时间,以便可以毫无错误地加载 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!