はじめまして。haru_0_4です。
Goを勉強し始めて早くも半年が経過しました。
今回はGoで勉強する中で、環境変数を扱う際に便利なパッケージcaarlos0/envを見つけたので、紹介したいと思います。
環境変数の扱い方
DB周りの認証情報の設定は環境変数に持たせることが一般的かと思います。
私もGoで環境変数を扱うとき、標準バッケージosを使って次のような使い方をしていました。
func main() {
port := os.Getenv("PORT")
fmt.Println(pass)
}
ここで、環境変数がないときはどうするのかというと、このようにデフォルト値を設定する処理を書きます。
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
しかし、この処理を環境変数の数だけ書くのは効率的とは言えません。
caarlos0/envを使う
そこで、caarlos0/envが登場します。
使い方は簡単で、扱いたい環境変数をstructに定義し、envタグでデフォルト値を設定するだけで設定は完了です。
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)
}
とてもスマートでわかりやすいコードになったと思います。
これで長ったらしい環境変数の処理を書く必要がなくなります。
他にも環境変数を扱うためにkelseyhightower/envconfig など同様にstructを使った方法もあるみたいなので、状況に応じて使い分けていきたいと思います。
まとめ
DBの秘匿情報やポート番号などをGoで環境変数として設定する際に、便利なパッケージを紹介しました。
少しでも参考になれば幸いです。
参考記事