Kalan's Blog

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

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

本部落主要是關於前端、軟體開發以及我在日本的生活,也會寫一些對時事的觀察和雜感
本部落格支援 RSS feed(全文章內容),可點擊下方 RSS 連結或透過第三方服務設定。若技術文章裡有程式碼語法等特殊樣式,仍建議至原網站瀏覽以獲得最佳體驗。

目前主題 亮色

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

【golang 筆記】 如何為你的專案設定環境變數

前言

在開發專案的時候常常需要切換不同的環境,也因此我們通常會設定不同的環境變數。不過如果直接寫死在程式當中每次修改起來實在太麻煩了,如果可以透過動態的方式傳入環境變數的話可以減少很多不必要的修改,程式也相對比較乾淨。

flag

一般在 golang 可以利用 flag 這個 package 做到類似的效果,例如:

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 在 compile time 設定變數。

雖然這樣的確不用寫死值在程式裡頭,但變數仍然要事先定義好。

透過 YAML 載入

為了解決上述問題,我們可以透過 yaml(或者你喜歡的 format)來統一管理環境變數。例如:

func LoadEnv(filename string) bool {
    file, err := ioutil.ReadFile(filename)
    if err != nil {
        // 在 production,我們可能會直接用 console 設定環境變數
        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) 存入,這樣一來在 local 的環境下就可以很容易地調整變數,記得要把設定當給 ignore 掉,不然如果變數裡頭有敏感資料,又剛好是 public 的 repo 就會被看光光了。

後記

我寫了一個相當簡單的 repo 來做這件事,如果在開發上真的有需要的話再持續優化他吧 XD

上一篇

透過 vuex 與 webpack dynamic import 動態載入 module

下一篇

日本軟體業常見名詞轉換

如果覺得這篇文章對你有幫助的話,可以考慮到下面的連結請我喝一杯 ☕️ 可以讓我平凡的一天變得閃閃發光 ✨

Buy me a coffee