web-dev-qa-db-ja.com

env varが空の場合にデフォルト値を割り当てる方法は?

Gioでは、環境変数が設定されていない場合、デフォルト値をどのように割り当てますか?

Pythonでできることはmongo_password = os.getenv('MONGO_PASS', 'pass')です。MONGO_PASS env varが設定されていない場合、passはデフォルト値です。

os.Getenvが空であることに基づいてifステートメントを試しましたが、ifステートメント内の変数割り当てのスコープのために機能しないようです。そして、複数のenv変数をチェックしているので、ifステートメント内でこの情報に基づいて行動することはできません。

42
Ryan Clair

デフォルト値にフォールバックするビルトインはないので、古き良き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
}
66
janos

探しているのは os.LookupEnvifステートメントの組み合わせです。

LookupEnvを使用するために更新されたjanosの回答は次のとおりです。

func getEnv(key, fallback string) string {
    value, exists := os.LookupEnv(key)
    if !exists {
        value = fallback
    }
    return value
}
21
puradox

Goには、ここのPythonとまったく同じ機能がありません。しかし、それを行うための最も慣用的な方法は、私が考えることができる、次のとおりです。

mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
    mongo_password = mp
}
9

OPと同じ質問があり、誰かがこのスレッドからの答えをかなり使いやすい気の利いたライブラリにカプセル化したのを見つけました、これが他の人を助けることを願っています!

https://github.com/caarlos0/env

2
Jaime Gago

きれいなコードを作成するには、次のようにします。

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
}
2
Eddy Hernandez

依存関係を少し追加しても問題ない場合は、 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)
}
0
Oleg Neumyvakin