golang 基礎庫之 go 獲取命令行參數,介紹了環境變量的獲取與設置以及如何使用默認值
環境變量的獲取與設置以及如何使用默認值
Golang 版本
1.12.1
前言
環境變量作爲配置選項可以顯著簡化應用的部署,並且這些在雲基礎架構中也是很常見的。
通常,本地和自動構建環境的 數據庫 連接配置是不同的。
如果配置由環境變量定義,則無需更改應用的配置文件或者程序代碼。如果環境變量沒有設置,則默認配置也是可以使用的。這樣對於開發人員就容易多了。
實現
創建 get.go
文件,代碼如下:
package main import ( "log" "os" ) func main(){ conStr := os.Getenv("DB_CONN") log.Printf("連接:%s\n",conStr) }
運行命令 export DB_CONN=db:/user@example && go run get.go
$ export DB_CONN=db:/user@example && go run get.go 2019/05/18 21:33:39 連接:db:/user@example
創建 lookup.go
文件,代碼如下:
package main import ( "fmt" "log" "os" ) func main() { key := "DB_CONN" connStr, ex := os.LookupEnv(key) if !ex { log.Printf("環境變量 %s 沒有設置\n", key) } fmt.Println(connStr) }
運行命令 unset DB_CONN && go run lookup.go
$ unset DB_CONN && go run lookup.go 2019/05/18 21:39:33 環境變量 DB_CONN 沒有設置
創建 main.go
文件,代碼如下:
package main import ( "log" "os" ) func main() { key := "DB_CONN" // 設置環境變量 os.Setenv(key, "postgres://as:[email protected]/pg?sslmode=verify-full") val := GetEnvDefault(key, "postgres://as:as@localhost/pg?sslmode=verify-full") log.Println("值是 :" + val) os.Unsetenv(key) val = GetEnvDefault(key, "postgres://as:[email protected]/pg?sslmode=verify-full") log.Println("默認值是 :" + val) } func GetEnvDefault(key, defVal string) string { val, ex := os.LookupEnv(key) if !ex { return defVal } return val }
運行命令 go run main.go
$ go run main.go 2019/05/18 21:42:58 值是 :postgres://as:[email protected]/pg?sslmode=verify-full 2019/05/18 21:42:58 默認值是 :postgres://as:[email protected]/pg?sslmode=verify-full
原理
環境變量的獲取和設置分別可以通過 os
包中 Getenv
和 Setenv
方法實現。方法名稱已經很明確說明了自身的功能。
但 Getenv
方法有個缺點,即使在未設置環境變量的情況下,它也返回一個空的字符串。
os
包中還有一個很有用的方法, LookupEnv
,該方法返回兩個值,一個是變量的值,另一個則是變量在環境中是否設置的布爾值。而 LookupEnv
方法則可以克服上面 Getenv
的缺點。
當我們要判斷是否設置了環境變量以及實現一個默認環境變量的方法,都應該使用 LookupEnv
。因爲如果未設置環境變量,則第二個值會返回 false