質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
前言
プロジェクトを開発しているときは、異なる環境に切り替える必要がよくあります。そのため、通常は異なる環境変数を設定します。しかし、プログラムに直接値をハードコーディングすると、毎回の修正が非常に面倒です。環境変数を動的に渡すことができれば、不要な修正を大幅に減らし、プログラムも比較的クリーンに保つことができます。
flag
一般的に、Golangでは flag パッケージを利用して似たような効果を得ることができます。例えば:
var env string
var accessToken string
func main() {
flag.StringVar(&env, 'ENV', 'development', 'your current env')
flag.StringVar(&accessToken, 'ACCESS_TOKEN', 'xxx-oo-ooo', 'your API access token')
flag.Parse()
// start your application
}
また、こちらの記事で触れられているように、go build -ldflag
を使用してコンパイル時に変数を設定することもできます。
この方法では確かに値をプログラム内にハードコーディングする必要がありませんが、変数は事前に定義しておく必要があります。
YAMLを通じた読み込み
上述の問題を解決するために、yaml(またはお好みのフォーマット)を使用して環境変数を一元管理することができます。例えば:
func LoadEnv(filename string) bool {
file, err := ioutil.ReadFile(filename)
if err != nil {
// プロダクション環境では、コンソールを使って環境変数を設定することがある
return false
}
var config := make(map[string]string)
yaml.Unmarshal(file, &config)
for k, v := range config {
os.Setenv(k, v)
}
}
yaml内の変数を読み込んだ後、os.Setenv(k, v)
を使用して一元的に保存します。これにより、ローカル環境で変数を簡単に調整できるようになります。設定ファイルは必ず無視リストに入れてください。そうしないと、変数に敏感な情報が含まれている場合、パブリックリポジトリで見られてしまうことになります。
後記
この作業のために、かなりシンプルな repo を作成しました。もし開発に本当に必要であれば、さらに最適化していきましょう XD
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee