Golang - comment attribuer une valeur par défaut si env var est vide?
Dans golang, comment affecter une valeur par défaut si la 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
env var n'est pas prêt.
j'ai essayé une instruction if basé sur os.Getenv
être vide, mais cela ne semble pas fonctionner en raison de la portée de la variable assignment à l'intérieur d'une instruction if. Et je vérifie qu'il y a plusieurs env var, donc je ne peux pas agir sur cette information dans la déclaration de si.
6 réponses
il n'y a pas de valeur intégrée pour revenir à une valeur par défaut, donc tu dois faire un bon vieux SI - AUTREMENT.
mais vous pouvez toujours créer une fonction helper pour faciliter cela:
func getenv(key, fallback string) string {
value := os.Getenv(key)
if len(value) == 0 {
return fallback
}
return value
}
Notez que @michael-hausenblas souligné dans un commentaire, gardez à l'esprit que si la valeur de la variable d'environnement est vraiment vide, vous obtiendrez la valeur de secours à la place.
Encore mieux que @Ł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 est os.LookupEnv
combiné avec un if
déclaration.
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 la même fonctionnalité que Python ici; la façon la plus idiomatique de le faire cependant, je peux penser, est:
mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
mongo_password = mp
}
j'ai ajouté une fonction supplémentaire pour avoir du code plus propre
// 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
}
Et dans le flux principal
myVar := getEnv("MONGO_PASS", "default-pass")
dans le cas où vous êtes D'accord avec l'ajout d'une petite dépendance, 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)
}
avait la même question que L'OP et a trouvé quelqu'un encapsulé les réponses de ce fil dans une bibliothèque astucieuse qui est assez simple à utiliser, espérons que cela aide les autres!