カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

前言

プロジェクト開発中には、さまざまな環境を切り替える必要があります。そのため、通常は異なる環境変数を設定します。ただし、プログラム内に直接固定値を書き込むと、変更が非常に面倒です。環境変数を動的に渡すことができれば、不要な変更を大幅に減らし、プログラムもよりクリーンになります。

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()

    // アプリケーションを起動する
}

または、この記事で言及されている方法を参考に、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)を使用して一元的に保存します。これにより、ローカル環境で変数を簡単に調整できるようになります。設定を無視するようにしておくことを忘れないでください。そうしないと、変数に機密情報が含まれていて、かつ公開されているリポジトリの場合、情報漏洩のリスクがあります。

後記

この問題を解決するために、非常にシンプルなリポジトリを作成しました。開発上本当に必要な場合は、引き続き最適化を行ってください。XD

作者

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

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください