LoginSignup
4
2

More than 5 years have passed since last update.

Goで環境変数を扱う - godotenv -> envconf

Posted at

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設定もできるので便利

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2