Gioでは、環境変数が設定されていない場合、デフォルト値をどのように割り当てますか?
Pythonでできることはmongo_password = os.getenv('MONGO_PASS', 'pass')
です。MONGO_PASS
env varが設定されていない場合、pass
はデフォルト値です。
os.Getenv
が空であることに基づいてifステートメントを試しましたが、ifステートメント内の変数割り当てのスコープのために機能しないようです。そして、複数のenv変数をチェックしているので、ifステートメント内でこの情報に基づいて行動することはできません。
デフォルト値にフォールバックするビルトインはないので、古き良き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
}
探しているのは os.LookupEnv
とif
ステートメントの組み合わせです。
LookupEnvを使用するために更新されたjanosの回答は次のとおりです。
func getEnv(key, fallback string) string {
value, exists := os.LookupEnv(key)
if !exists {
value = fallback
}
return value
}
Goには、ここのPythonとまったく同じ機能がありません。しかし、それを行うための最も慣用的な方法は、私が考えることができる、次のとおりです。
mongo_password := "pass"
if mp := os.Getenv("MONGO_PASS"); mp != "" {
mongo_password = mp
}
OPと同じ質問があり、誰かがこのスレッドからの答えをかなり使いやすい気の利いたライブラリにカプセル化したのを見つけました、これが他の人を助けることを願っています!
きれいなコードを作成するには、次のようにします。
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
}
依存関係を少し追加しても問題ない場合は、 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)
}