installing - install golang en mac
Golang-¿Cómo asignar valor predeterminado si env var está vacío? (6)
En Golang, ¿cómo asigna un valor predeterminado si no se establece una variable de entorno?
En python podría hacer mongo_password = os.getenv(''MONGO_PASS'', ''pass'')
donde pass
es el valor predeterminado si MONGO_PASS
env var no está establecido.
Intenté una instrucción if basada en que os.Getenv
estaba vacío, pero eso no parece funcionar debido al alcance de la asignación de variables dentro de una instrucción if. Y estoy revisando múltiples env env, por lo que no puedo actuar sobre esta información dentro de la sentencia if.
Agregué una función adicional para tener código más limpio.
// 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
}
Y en el flujo principal.
myVar := getEnv("MONGO_PASS", "default-pass")
En caso de que esté de acuerdo con agregar poca dependencia, puede usar algo como 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)
}
Go no tiene la misma funcionalidad que Python aquí; La forma más idiomática de hacerlo, sin embargo, puedo pensar, es:
mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
mongo_password = mp
}
Lo que estás buscando es os.LookupEnv
combinado con una sentencia if
.
Aquí está la respuesta de janos actualizada para usar LookupEnv:
func getEnv(key, fallback string) string {
value, exists := os.LookupEnv(key)
if !exists {
value = fallback
}
return value
}
No hay una función incorporada para volver a un valor predeterminado, por lo que tiene que hacer un buen anticuado si-else.
Pero siempre puedes crear una función de ayuda para hacer eso más fácil:
func getenv(key, fallback string) string {
value := os.Getenv(key)
if len(value) == 0 {
return fallback
}
return value
}
Tenga en cuenta que como @michael-hausenblas señaló en un comentario, tenga en cuenta que si el valor de la variable de entorno está realmente vacío, obtendrá el valor de respaldo en su lugar.
Incluso mejor como @ŁukaszWojciechowski señaló @ŁukaszWojciechowski , usando os.LookupEnv
:
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}
Tenía la misma pregunta que el OP y encontré que alguien encapsuló las respuestas de este hilo en una biblioteca ingeniosa que es bastante fácil de usar, ¡espero que esto ayude a otros!