Goenv教程展示了如何在Golang中使用环境变量。
环境变量
环境变量是一个动态命名的值,可以影响正在运行的进程在计算机上的行为方式。它们是进程运行环境的一部分。在软件开发中,环境变量用于配置应用程序。
环境变量的示例包括文件系统中所有可执行文件的位置、默认shell和编辑器或系统区域设置。
要在Go中使用环境变量,我们可以使用os包或第三方godotenv或viper库。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
进入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
转到os.LookupEnv
LookupEnv函数检索由键命名的环境变量的值。如果设置了变量,则返回值(可能为空)并且布尔值为真。否则返回值将为空,布尔值将为假。
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
进入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将字符串切割成键值对。
去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.
去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函数。
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文件中的环境变量读取到映射中。
在本教程中,我们使用了Go中的环境变量。
列出所有Go教程。
