こんにちは、Habr!
Go by Enda Phelanの
環境変数に関するナンセンスガイドの翻訳を紹介します。
環境変数は、システムレベルで設定できるため、アプリケーション構成を保存する最適な方法です。 これは、
Twelve-Factor App方法論の原則の1つであり、実行中のシステムからアプリケーションを分離することができます(構成は展開ごとに大幅に異なる可能性があり、コードは変わらないはずです)。
環境変数を使用する
環境変数と対話するために必要なものはすべて、
os標準ライブラリにあります。 これは、PATH環境変数の値を取得する方法です。
package main import ( "fmt" "os" ) func main() {
そして-変数の値を設定します:
package main import ( "fmt" "os" ) func main() {
.envファイルから環境変数をロードする
多くのプロジェクトがすぐに起動される開発マシンでは、変数環境にパラメーターを保存することが必ずしも便利ではありません。 envファイルを使用してプロジェクト間で分割する方が論理的です。 これは、たとえば
godotenvを使用して実行できます。これはGo Rubyライブラリに移植された
dotenvです。 これにより、アプリケーションに必要な環境変数を.envファイルから設定できます。
パッケージをインストールするには、次を実行します。
go get github.com/joho/godotenv
プロジェクトのルートにある.envファイルに設定を追加します。
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
これで、アプリケーションでこれらの値を使用できます。
package main import ( "log" "github.com/joho/godotenv" "fmt" "os" )
環境変数の値がシステムレベルで設定されている場合、Goはenvファイルで指定された値の代わりにこの値を使用することに注意してください。
構成モジュールで環境変数をラップします
もちろん、上記のように環境変数に直接アクセスできるのはいいことですが、そのような解決策を維持することはかなり問題があるようです。 変数名は文字列であり、変更する場合は、アプリケーション全体で変数参照を更新するプロセスにつながる頭痛の種を想像してください。
この問題を解決するために、環境変数をより集中的かつサポートされた方法で操作するための構成モジュールを作成します。
以下は、
Config構造体で構成パラメーターを返す簡単な構成モジュールです(システムに環境変数がない場合、デフォルトのパラメーター値も設定します)。
package config import ( "os" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig }
次に、既存のソリューションは文字列型のみをサポートするため、
Config構造体に型を追加します。これは大規模なアプリケーションにはあまり適していません。
bool、slice、integer型のハンドラーを作成します。
package config import ( "os" "strconv" "strings" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig DebugMode bool UserRoles []string MaxUsers int }
envファイルに新しい環境変数を追加します。
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno MAX_USERS=10 USER_ROLES=admin,super_admin,guest DEBUG_MODE=false
これで、アプリケーションの任意の場所でそれらを使用できます。
package main import ( "fmt" "log" "github.com/craicoverflow/go-environment-variables-example/config" "github.com/joho/godotenv" )
できた!
はい、アプリケーションを構成するためのターンキーソリューションを提供するパッケージがありますが、自分で簡単に実行できる場合はどれくらい必要ですか?
また、アプリケーションの構成をどのように管理しますか?