カランのブログ

Kalan 頭像照片,在淡水拍攝,淺藍背景

四零二曜日電子報上線啦!訂閱訂起來

ソフトウェアエンジニア / 台湾人 / 福岡生活
このブログはRSS Feed をサポートしています。RSSリンクをクリックして設定してください。技術に関する記事はコードがあるのでブログで閲覧することをお勧めします。

今のモード ライト

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

記事のタイトルや概要は自動翻訳であるため(中身は翻訳されてない場合が多い)、変な言葉が出たり、意味伝わらない場合がございます。空いてる時間で翻訳します。

プロジェクトの環境変数を設定する-VIPER

大概数ヶ月前、私はgolangで環境変数を設定する方法についての記事を書きました。環境変数をエレガントに設定することは非常に重要なことですので、私はこのために簡単な関数を作成しました。

当初の考えは非常にシンプルでした。対応するconfigファイルが提供されている場合、その中のキー/値をos.Setenvを使用して設定します。その後、アプリ全体でos.Getenvを直接使用して値を取得できます。

しかし、正式なデプロイ時にはいくつかの問題が発生することが避けられません:

  • 設定ファイルは必ずしもyaml形式であるとは限らず、他の形式である可能性もあります。
  • 時には外部サービス(consul、etcdなど)を使用して環境変数を注入したい場合がありますが、現在の方法ではos.Getenvを使用しています。
  • 異なるパスから設定ファイルを読み込むことができます。
  • コマンドラインを介して変数を設定できます。
  • その他の予期しない問題が発生する可能性があります。

小規模なプロジェクトでは、これによって問題が解決する場合もありますが、より柔軟な設定方法が必要になると、これだけでは不十分です。

これらの問題は、golangにはすでに成熟した解決策が存在しています。それがViperと呼ばれるものです。

VIPER

VIPERは非常に強力な環境変数設定パッケージです。以下の機能をサポートしています:

  • デフォルト値の設定
  • 異なる形式の設定ファイルのサポート(jsontomlyaml
  • 設定ファイルの変更を監視することができます(これにより、サーバーを再起動する必要がありません!)
  • リモートサーバーから変数を取得することができます(例:consulまたはetcd
  • flagを使用して変数を取得することができます
  • readerから変数を取得することができます。これは、異なるソースから変数を設定できることを意味します。

基本的な使用方法

まず、go getまたはmodを使用してViperをダウンロードします。

go get github.com/spf13/viper

func main() {
  viper.SetDefault("AWS_ACCESS_TOKEN", "AWS123456789") // デフォルト値の設定
	viper.SetConfigName("config") // configファイルの名前を指定
	viper.AddConfigPath("./config")
	viper.ReadInConfig()
	viper.AutomaticEnv()
}
  • SetDefault(key, value):デフォルト値の設定
  • SetConfigName(name):設定ファイルの名前を設定します。例えば、設定ファイルがconfig.ymlと呼ばれる場合、configとします。なぜ型を指定しないのかというと、viperが自動的に処理してくれるからです。
  • AddConfigPath:複数のフォルダーを設定できます
  • ReadInConfig:呼び出す必要があります。設定を実際に読み込むためです。
  • AutomaticEnvENVの変数をviperに自動的に同期させることができます

Viperは、設定を行うための多くの関数も提供しています。

変数の取得

変数を設定した後、viper.Getを使用して読み取ることができます。Getinterface{}を返しますが、viperはviper.GetStringviper.GetDurationviper.GetStringMapなど、多くの型変換も提供しています。

func main() {
	fmt.Println(viper.GetString("AWS_ACCESS_TOKEN"))
  fmt.Println(viper.GetUint32("YOUR_INT"))
  fmt.Println(viper.GetTime("YOUR_TIME"))
}

結論

変数の設定は難しいと言えるかもしれませんが、簡単な場合もあれば複雑な場合もあります。考慮すべきことは想像以上に多いですが、VIPERは多くの一般的な使用シナリオを処理してくれます。

また、アクセストークンやシークレットキーなどの設定を行う際には、.gitignoreを使用してコミット時に誤ってGitHubにプッシュされないようにすることを特に注意してください。

次の記事

オーバーフローアンカーによるボトムコンポーネントへのピンの実装

前の記事

EMS

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee