Как назначить значение по умолчанию, если env var пуст?
Как назначить значение по умолчанию, если переменная окружения не установлена в Go?
В Python я мог сделать mongo_password = os.getenv('MONGO_PASS', 'pass')
, где pass
является значением по умолчанию, если MONGO_PASS
env var не установлен.
Я пробовал оператор if, основанный на том, что os.Getenv
пуст, но, похоже, это не работает из-за объема присваивания переменных внутри оператора if. И я проверяю наличие нескольких env var, поэтому я не могу использовать эту информацию в операторе if.
Ответы
Ответ 1
Нет встроенного, чтобы вернуться к значению по умолчанию,
так что вам нужно сделать добрый старомодный if-else.
Но вы всегда можете создать вспомогательную функцию, чтобы сделать это проще:
func getenv(key, fallback string) string {
value := os.Getenv(key)
if len(value) == 0 {
return fallback
}
return value
}
Обратите внимание, что в @michael-hausenblas в комментарии,
имейте в виду, что если значение переменной окружения действительно пустое, вы получите вместо этого запасное значение.
Еще лучше, чем @ŁukaszWojciechowski, используя os.LookupEnv
:
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}
Ответ 2
Что вам нужно, так это os.LookupEnv
сочетании с оператором if
.
Вот ответ от janos, обновленный для использования LookupEnv:
func getEnv(key, fallback string) string {
value, exists := os.LookupEnv(key)
if !exists {
value = fallback
}
return value
}
Ответ 3
Go не имеет такой же функциональности, как Python; самый идиоматический способ сделать это, хотя, я могу думать, есть:
mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
mongo_password = mp
}
Ответ 4
Чтобы иметь чистый код, я делаю это:
myVar := getEnv("MONGO_PASS", "default-pass")
Я определил функцию, которая используется во всем приложении
// 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
}
Ответ 5
У него был тот же вопрос, что и у ОП, и он нашел, что кто-то заключил ответы из этой темы в изящную библиотеку, довольно простую в использовании, надеюсь, это поможет другим!
https://github.com/caarlos0/env
Ответ 6
Если у вас все в порядке с добавлением небольшой зависимости, вы можете использовать что-то вроде 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)
}