開発環境と本番環境を切り分けたい理由
アプリケーションの起動に当たって、開発環境と本番環境で設定を変えたいことがあるでしょう。
例えばサーバのポート番号やDB接続の定義情報など。
サードバーティのAPIに繋ぐ際に開発モードと本番モードが分かれている場合などもそうですね。
言語によってはymlで環境ごとに設定値を変える方法が多いですね。
GoのGinではどのように切り分ける?
やり方は色々ありますが、1つの方法として.envファイルの読み込み有無で判定する方法があります。
PythonのDjangoなどでも使う方法ですが、ローカルで用意した.envファイルをGitの管理対象から外し、.envの中身を読み込める場合はローカル環境の設定を、読み込めない場合は本番環境の設定をする方法です。
実装の中身
上記の設定を実装するためにはgodotenvを使用するのが良いです。
.envファイルを用意
プロジェクト直下にでも.envを用意してください。
中身は空でも構いません。(DBの接続情報を記載する場合もありますが、とりあえず空で用意しましょう。)
注意点として、上記にも記した通りGitの管理対象から外してください。
つまりは.gitignoreに含めてください。
.gitignore
.env
godotenvのインストール
go get github.com/joho/godotenv
import内にモジュールを定義
fmtもosも読み込み時に使用します。
import ( "fmt" "os" "github.com/joho/godotenv" )
読み込み処理の実装
例として、サーバのポート番号を設定する処理を書きました。
ローカル(開発)環境ではポートが9000、本番環境では80で起動させるための処理です。
func main() { port := "9000" // ローカル環境のポート番号を予め定義 err := godotenv.Load(fmt.Sprintf("../%s.env", os.Getenv("GO_ENV"))) if err != nil { // エラーの場合 = .envが読み込めない場合 port = 80 // 本番環境のポート番号 } }
これでポート番号は80になりますね。
DBの接続情報やAPIの接続情報なども同様の方法で設定が可能です。
他にもやり方はあると思いますが、1つの方法としてご参考までに。