golang 基础库之 go 获取命令行参数,介绍了环境变量的获取与设置以及如何使用默认值

环境变量的获取与设置以及如何使用默认值

Golang 版本

1.12.1

前言

环境变量作为配置选项可以显著简化应用的部署,并且这些在云基础架构中也是很常见的。

通常,本地和自动构建环境的 数据库 连接配置是不同的。

如果配置由环境变量定义,则无需更改应用的配置文件或者程序代码。如果环境变量没有设置,则默认配置也是可以使用的。这样对于开发人员就容易多了。

实现

get.go
package mainimport ("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 mainimport ("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 mainimport ("log""os"
)func main() {key := "DB_CONN"// 设置环境变量os.Setenv(key, "postgres://as:as@example.com/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:as@127.0.0.1/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:as@example.com/pg?sslmode=verify-full
2019/05/18 21:42:58 默认值是 :postgres://as:as@127.0.0.1/pg?sslmode=verify-full

原理

osGetenvSetenv
Getenv
osLookupEnvLookupEnvGetenv
LookupEnvfalse