Goで環境変数を扱うのに godotenv を利用するのはよく拝見しますが、 envconfig でもう少し使いやすくする方法を紹介します
準備
まずは以下をインストール
$ go get github.com/joho/godotenv
$ go get github.com/kelseyhightower/envconfig
使用例
env-sample
├── .env
├── env
│ ├── app.go
│ └── env.go
└── main.go
# .env
MY_NAME=hoge
env/env.go
package env
import (
"github.com/joho/godotenv"
"github.com/kelseyhightower/envconfig"
)
func Load(filename ...string) error {
return godotenv.Load(filename...)
}
func process(prefix string, spec interface{}) interface{} {
if err := envconfig.Process(prefix, spec); err != nil {
panic(err)
}
return spec
}
env/app.go
package env
type envApp struct {
Name string `default:"name"`
PassWord string `default:"pass"`
}
var app *envApp
func App() *envApp {
if app == nil {
app = process("my", &envApp{}).(*envApp)
}
return app
}
main.go
package main
import (
"github.com/satooon/env-sample/env"
"fmt"
)
func main() {
if err := env.Load(); err != nil {
panic(err)
}
fmt.Printf("%#v\n", env.App())
}
$ go run main.go
&env.envApp{Name:"hoge", PassWord:"pass"}
アノテーションでデフォルト値やRequired設定もできるので便利