上一节我们知道可以通过创建「标记」的方式向程序传入参数。除此之外,我们还可以使用环境变量来向程序传递参数,尤其是当你的程序比较大的时候,使用这种方法会更加简单方便。

通过配置环境变量的方式,极大地简化了应用程序的部署。而且,我们还可以在程序中为这个变量设置一个默认值,当无法读取到环境变量的时候,程序可以使用这个设置好的默认值。

下面来介绍一下如何读取以及设置环境变量。

代码展示:

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() {...}