Go 环境变量
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何在 Golang 中使用环境变量。
环境变量
环境变量是动态命名的值,可以影响计算机上运行进程的行为。它们是进程运行环境的一部分。在软件开发中,环境变量用于配置应用程序。
环境变量的例子包括文件系统中所有可执行文件的位置、默认 shell 和编辑器,或者系统区域设置。
要在 Go 中使用环境变量,我们可以使用 os
包或第三方 godotenv
或 viper
库。
Go os.Getenv
Getenv
检索由键命名的环境变量的值。它返回该值,如果变量不存在,则返回空字符串。要区分空值和未设置值,请使用 LookupEnv
。
package main import ( "fmt" "os" ) func main() { fmt.Println("Shell:", os.Getenv("SHELL")) }
该示例打印当前用户 shell 的名称。
$ go run get_env.go Shell: /bin/bash
Go os.LookupEnv
LookupEnv
函数检索由键命名的环境变量的值。如果设置了该变量,则返回其值(可能为空),布尔值为 true。否则,返回的值将为空,布尔值为 false。
package main import ( "fmt" "os" ) func main() { getEnv := func(key string) { val, ok := os.LookupEnv(key) if !ok { fmt.Printf("%s not set\n", key) } else { fmt.Printf("%s=%s\n", key, val) } } getEnv("EDITOR") getEnv("SHELL") }
在代码示例中,我们尝试获取两个环境变量。如果变量存在,则打印其值;否则,显示该变量未设置的消息。
$ go run lookup.go EDITOR not set SHELL=/bin/bash
Go os.Setenv
os.Setenv
设置由键命名的环境变量的值。
package main import ( "fmt" "os" ) func main() { fmt.Println("editor:", os.Getenv("EDITOR")) os.Setenv("EDITOR", "emacs") fmt.Println("editor:", os.Getenv("EDITOR")) }
在代码示例中,我们使用 os.Setenv
设置了 EDITOR 变量。
Go 列出环境变量
os.Environ
返回一个字符串副本,代表环境变量,格式为“key=value”。
package main import ( "fmt" "os" "strings" ) func main() { for _, e := range os.Environ() { pair := strings.SplitN(e, "=", 2) fmt.Printf("%s: %s\n", pair[0], pair[1]) } }
在代码示例中,我们获取了所有环境变量的列表。我们使用 SplitN
将字符串分割成键值对。
Go os.Expandenv
os.ExpandEnv
是一个帮助函数,它将字符串中的 $var
替换为给定变量的值。对未定义变量的引用将被替换为空字符串。
package main import ( "fmt" "os" ) func main() { os.Setenv("EDITOR", "emacs") fmt.Println(os.ExpandEnv("My editor is $EDITOR.")) fmt.Println(os.ExpandEnv("My shell is $SHELL.")) }
该示例展开了两个变量。
$ go run expandenv.go My editor is emacs. My shell is /bin/bash.
Go dotenv 库
在开发机器上,环境变量通常存储在特殊的 .env
文件中。godotenv
库从 .env
文件加载环境变量。
$ go get github.com/joho/godotenv
我们安装该库。
EDITOR=emacs NAME=Peter
我们有两个变量。
package main import ( "fmt" "log" "os" "github.com/joho/godotenv" ) func init() { err := godotenv.Load(".env") if err != nil { log.Fatal("Error loading .env file") } } func main() { fmt.Printf("%s uses %s\n", os.Getenv("NAME"), os.Getenv("EDITOR")) }
使用 Load
函数,我们加载变量,然后使用 os.Getenv
检索它们。
如果我们不想将现有环境变量与 .env
文件中的变量混淆,我们可以使用 Read
函数,它返回一个环境变量的 map。
package main import ( "fmt" "log" "github.com/joho/godotenv" ) func main() { var envs map[string]string envs, err := godotenv.Read(".env") if err != nil { log.Fatal("Error loading .env file") } name := envs["NAME"] editor := envs["EDITOR"] fmt.Printf("%s uses %s\n", name, editor) }
在代码示例中,我们将 .env
文件中的环境变量读取到一个 map 中。
来源
在本文中,我们学习了如何在 Go 中使用环境变量。