Go言語で環境変数を読み出す
Go言語では標準パッケージから簡単に環境変数を読み出すことができます。
fmt.Println(os.Getenv("HOME"))
しかし、往々にして環境変数がないときのデフォルトを設定する事があります。
その場合はこのように書きますが、これを環境変数分用意するのはなかなか骨が折れます。
home := os.Getenv("HOME")
if home == "" {
home = "/home/default/place"
}
fmt.Println(home)
caarlos0/envを使ってStructに読み出す
そこで活躍するのが env というライブラリです。
環境変数から読み出したい情報はStructにまとめておき、tagに情報を付与することで
デフォルト値の設定や必須設定等を行えます。
また、読み出し先のStructを定義しているだけなので、
定義するStructに他のアプリケーション設定を足したり、
メソッドを生やしたりすることも勿論できます。
package main
import (
"fmt"
"github.com/caarlos0/env"
)
type Config struct {
Home string `env:"HOME"`
Port int `env:"PORT" envDefault:"3000"` // デフォルト値の設定
IsProduction bool `env:"PRODUCTION"`
Hosts []string `env:"HOSTS" envSeparator:":"` // 配列も読める
SecretKey string `env:"SECRET_KEY,required"` // 必須設定も可
Notag string // タグ無しにすれば環境変数のない設定も同居できる
}
func main() {
cfg := Config{}
env.Parse(&cfg) // パースすると環境変数から値が読み出される
fmt.Println(cfg)
}
多分実用する段階であればmainパッケージに置くことはないと思うので、
configパッケージにシングルトンでConfigオブジェクトを保有しておくなり、
ロード関数を作って毎回読み出すなり色々工夫してみて下さい。