Maison > développement back-end > Golang > Comment mentionner la durée en jours pour que la configuration de Golang Viper puisse être chargée sans erreur ?

Comment mentionner la durée en jours pour que la configuration de Golang Viper puisse être chargée sans erreur ?

PHPz
Libérer: 2024-02-12 16:30:07
avant
854 Les gens l'ont consulté

如何提及以天为单位的持续时间,以便可以毫无错误地加载 golang viper 配置?

Contenu de la question

J'ai deux configurations dans le fichier .env, comme suit

max_token_expiry_days=30d
access_token_duration=30m
Copier après la connexion

La structure utilisée pour charger la configuration dans Golang est la suivante

type appconfig struct {
    maxtokenexpiry      time.duration `mapstructure:"max_token_expiry_days"`
    accesstokenduration time.duration `mapstructure:"access_token_duration"`
}
Copier après la connexion

Maintenant, lorsque j'essaie de charger la configuration, j'obtiens l'erreur suivante

* error decoding 'max_token_expiry_days': time: unknown unit "d" in duration "30d"
Copier après la connexion

Cela signifie probablement que le problème vient de max_token_expiry_days=30d 行,因为它无法识别 d 标签。但是 access_token_duration=30m 中的 m 标签与 time 运行良好。golang 中的 duration être capable de bien l'analyser.

Dans le code source du package time, je vois la structure suivante

Nanosecond  Duration = 1
Microsecond          = 1000 * Nanosecond
Millisecond          = 1000 * Microsecond
Second               = 1000 * Millisecond
Minute               = 60 * Second
Hour                 = 60 * Minute
Copier après la connexion

Y a-t-il un moyen de représenter le nombre de jours dans la configuration ?

Solution de contournement

En effet, la ParseDuration appelée sur votre chaîne de temps ne prend pas en charge dcomme suffixe d'unité

Les unités de temps valides sont "ns", "us" (ou "μs"), "ms", "s", "m", "h".

Il vaut mieux utiliser 30d 的小时数,即 720h pour résoudre les ambiguïtés.

Voir aussi la question/explication dans golang/go pour comprendre pourquoi les concepteurs du langage ont décidé d'utiliser select. Pourquoi time.ParseDuration() ne prend pas en charge les jours ? #17767

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal