Dans golang, comment attribuez-vous une valeur par défaut si une variable d'environnement n'est pas définie?
En python, je pourrais faire mongo_password = os.getenv('MONGO_PASS', 'pass')
, où pass
est la valeur par défaut si MONGO_PASS
var var n'est pas défini.
J'ai essayé une instruction if basée sur os.Getenv
étant vide, mais cela ne semble pas fonctionner en raison de la portée de l'affectation de variable dans une instruction if. Et je vérifie la présence de plusieurs variables env, je ne peux donc pas agir sur ces informations dans l'instruction if.
Il n'y a pas d'intégré pour revenir à une valeur par défaut, Vous devez donc faire un bon vieux jeu si.
Mais vous pouvez toujours créer une fonction d'assistance pour rendre cela plus facile:
func getenv(key, fallback string) string {
value := os.Getenv(key)
if len(value) == 0 {
return fallback
}
return value
}
Notez que, comme le fait remarquer @ michael-hausenblas dans un commentaire, , Gardez à l'esprit que si la valeur de la variable d'environnement est vraiment vide, vous obtiendrez la valeur de repli.
Encore mieux comme @ ŁukaszWojciechowski a souligné, en utilisant os.LookupEnv
:
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}
Ce que vous cherchez, c'est os.LookupEnv
combiné avec une instruction if
.
Voici la réponse de janos mise à jour pour utiliser LookupEnv:
func getEnv(key, fallback string) string {
value, exists := os.LookupEnv(key)
if !exists {
value = fallback
}
return value
}
Go n'a pas exactement les mêmes fonctionnalités que Python ici; La façon la plus idiomatique de le faire, cependant, est la suivante:
mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
mongo_password = mp
}
Si vous aviez la même question que le PO et que quelqu'un avait résumé les réponses de ce fil dans une bibliothèque astucieuse assez simple à utiliser, espérons que cela aidera les autres!
Pour avoir un code propre, je fais ceci:
myVar := getEnv("MONGO_PASS", "default-pass")
J'ai défini une fonction utilisée dans l'ensemble de l'application
// getEnv get key environment variable if exist otherwise return defalutValue
func getEnv(key, defaultValue string) string {
value := os.Getenv(key)
if len(value) == 0 {
return defaultValue
}
return value
}
Si vous voulez ajouter de petites dépendances, vous pouvez utiliser quelque chose comme https://github.com/urfave/cli
package main
import (
"os"
"github.com/urfave/cli"
)
func main() {
app := cli.NewApp()
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang, l",
Value: "english",
Usage: "language for the greeting",
EnvVar: "APP_LANG",
},
}
app.Run(os.Args)
}