サーバー情報やパスワードは外部にもらしたくない場合などRuby、Pythonの場合はdotenvを使用するケースが多いですがGoにもdotenvに対応したライブラリーはあります
goの場合はgodotoenvを使うのがポピュラーみたいなのでこれを使用します
##使用法
下記のライブラリーをインストールしてください。
go get github.com/joho/godotenv
- .envファイルを作成してください
.env
USER_NAME=root
PASSWORD=password
hello.go
package main
import (
"os"
"fmt"
"log"
"github.com/joho/godotenv"
)
func Env_load() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
}
func main() {
Env_load()
message := fmt.Sprintf("user_name=%s password=%s", os.Getenv("USER_NAME"), os.Getenv("PASSWORD"))
fmt.Println(message)
}
// => user_name=root password=password
- アプリケーションの開発などで固有の環境で使用したい場合
開発環境用とテスト用を想定して.env.developmentと.env.testを作る
.env.developmentを作成
USER_NAME=root
PASSWORD=password
DATABASE_NAME=hoge_development
.env.testを作成
USER_NAME=root
PASSWORD=password
DATABASE_NAME=hoge_test
hello.go
package main
import (
"os"
"fmt"
"log"
"github.com/joho/godotenv"
)
func Env_load() {
// 環境変数GO_ENVは適当につけました
if os.Getenv("GO_ENV") == "" {
os.Setenv("GO_ENV", "development")
}
err := godotenv.Load(fmt.Sprintf(".env.%s", os.Getenv("GO_ENV")))
if err != nil {
log.Fatal("Error loading .env file")
}
}
func main() {
Env_load()
message := fmt.Sprintf("dbname=%s user=%s password=%s",
os.Getenv("DATABASE_NAME"),
os.Getenv("USER_NAME"),
os.Getenv("PASSWORD"),)
fmt.Println(message)
}
実行してみる
$ go run hello.go
//=> dbname=hoge_development user=root password=password
$ GO_ENV=test go run hello.go
//=> dbname=hoge_test user=root password=password