上一节我们知道可以通过创建「标记」的方式向程序传入参数。除此之外,我们还可以使用环境变量来向程序传递参数,尤其是当你的程序比较大的时候,使用这种方法会更加简单方便。
通过配置环境变量的方式,极大地简化了应用程序的部署。而且,我们还可以在程序中为这个变量设置一个默认值,当无法读取到环境变量的时候,程序可以使用这个设置好的默认值。
下面来介绍一下如何读取以及设置环境变量。
代码展示:
package main
import (
"log"
"os"
)
func main() {
connStr := os.Getenv("DB_CONN")
log.Printf("Connection string: %s\n", connStr)
connStr2, ex := os.LookupEnv("DB_CONN_2")
if !ex {
log.Printf("The env variable %s is not set.\n", "DB_CONN_2")
}
log.Printf("Connection string: %s\n", connStr2)
_ = os.Unsetenv("DB_CONN")
_ = os.Setenv("DB_CONN", "db:/user3@example")
connStr3 := os.Getenv("DB_CONN_3")
log.Printf("Connection string: %s\n", connStr3)
}
编译程序:
go build -o main
运行程序:
export DB_CONN=db:/user@example && ./main
输出结果:
2020/02/17 12:38:53 Connection string: db:/user@example
2020/02/17 12:38:53 The env variable DB_CONN_2 is not set.
2020/02/17 12:38:53 Connection string:
2020/02/17 12:38:53 Connection string: db:/user3@example
详细说明:
Golang 中对环境变量的操作提供了几个方法:
- Getenv: 直接读取环境变量,参数为环境变量名。如果环境变量未设置,默认为空。
func Getenv(key string) string {...}
- LookupEnv: 读取环境变量,并判断其是否已经设置。如果没有设置,返回的第二个参数为 false。
func LookupEnv(key string) (string, bool) {...}
- Setenv: 设置环境变量。
func Setenv(key, value string) error {...}
- Unsetenv: 取消设置环境变量,即将目标环境变量置空。
func Unsetenv(key string) error {...}
- Clearenv: 清空所有环境变量。
func Clearenv() {...}