ホームページ >バックエンド開発 >Golang >環境変数を使用して Go アプリ設定をオーバーライドする

環境変数を使用して Go アプリ設定をオーバーライドする

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 07:43:14270ブラウズ

Override Go app configuration with Environment variable

コンテナ化されたアプリケーションをより柔軟にする方法は?

少なくとも 10 年間、私たちはコンテナーで動作するアプリケーションを開発してきました。このアプローチの長所と短所については考慮しませんが、アプリケーションの柔軟性に焦点を当てたいと思います。ほぼすべての依存関係、つまり Postgres、MySql、Redis などのストレージ コンテナーでは、環境変数を介してほとんどの構成プロパティをオーバーライドできます。 Docker コンテナは、コンテナ内で環境変数を使用するよう促します。しかし、よく知られたサービスとは異なり、プログラマーは独自のアプローチでカスタム アプリケーションを開発します。私は、JSON 構成ファイルを使用してアプリケーションを構成することを好みます。しかし、構成ファイルに 100 個以上のプロパティがあり、各プロパティに環境変数を使用できない場合はどうすればよいでしょうか。この代わりに、JSON 構成ファイルを有効なデフォルト値を持つテンプレートとして使用し、適切な環境変数が設定されている場合はアプリケーションの起動時にプロパティをオーバーライドすることにしました。

Go アプリケーションでこのようなアプローチを実装する方法

現在、私たちは単一の Docker イメージを使用していません。 docker-compose のような単純なものであっても、ある程度のオーケストレーションが必要です。 docker-compose では通常、.env ファイルを作成します。前に述べたように、環境変数は Postgres や MySQL などのよく知られたイメージで適切に機能します。デフォルト値で完全に機能するテンプレートとして使用している次のアプリケーション構成 (JSON) があると考えてください。

{
    "server": {
        "address": "0.0.0.0",
        "port": 8182
    },
    "logging": {
        "level": "info",
        "http_log": false,
        "http_console_out": false
    }
}

この値はどれもオーバーライドできるはずです。デバッグするにはログ レベルを上げ、HTTP ログを有効にする必要があることを検討してください。これを簡単に行うには、特別な名前パターンを持つ技術環境変数を作成するだけです:

  1. 二重アンダースコアで始まる __
  2. には、完全なプロパティ パス、つまりログ レベル __logging.level が含まれます。

この go パッケージを使用すると、やるべきことをすべて非常に簡単に行うことができます。

  1. go_config_extender.LoadJSONConfigWithEnvOverride 関数を使用してファイルから JSON オブジェクトを読み取ります (テストで完全な例を確認できます)
  2. env ファイルを次のように設定します。
# all previous variables
__logging.level="debug"
__logging.http_log=true

以上です。GitHub で STAR をお願いします

結論

このアプローチとパッケージは、コンテナ化されたアプリケーションだけでなく、ネイティブで実行されるアプリケーションにも使用できます。このパッケージは認証サーバー上で正常に動作しています。

以上が環境変数を使用して Go アプリ設定をオーバーライドするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。