LoginSignup
70
44

More than 5 years have passed since last update.

goでDotenvを使用する

Last updated at Posted at 2015-11-13

サーバー情報やパスワードは外部にもらしたくない場合などRuby、Pythonの場合はdotenvを使用するケースが多いですがGoにもdotenvに対応したライブラリーはあります

goの場合はgodotoenvを使うのがポピュラーみたいなのでこれを使用します

使用法

下記のライブラリーをインストールしてください。

go get github.com/joho/godotenv
  • .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
70
44
0

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
70
44