今天在阅读Go开源分布式 key-value 存储软件etcd的时候,在main函数中遇到了一个有关于系统平台判断的代码如下:
func checkSupportArch() {
// TODO qualify arm64
if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" {
return
}
// unsupported arch only configured via environment variable
// so unset here to not parse through flag
defer os.Unsetenv("ETCD_UNSUPPORTED_ARCH")
if env, ok := os.LookupEnv("ETCD_UNSUPPORTED_ARCH"); ok && env == runtime.GOARCH {
fmt.Printf("running etcd on unsupported architecture %q since ETCD_UNSUPPORTED_ARCH is set\n", env)
return
}
fmt.Printf("etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=%s set\n", runtime.GOARCH)
os.Exit(1)
}
其中有这样一段:
// unsupported arch only configured via environment variable // so unset here to not parse through flag defer os.Unsetenv("ETCD_UNSUPPORTED_ARCH")
从注释来看表示不支持的平台架构只能通过环境变量配置,因此就搜了一下go中有关环境变量的操作
Go语言中os包提供了一些环境变量的操作封装。包括:
设置环境变量:Setenv
获取环境变量:Getenv
删除指定的环境变量:Unsetenv
获取所有环境变量:Environ
清除所有环境变量:Clearenv
示例代码如下:
package main
import (
"fmt"
"os"
)
func main(){
os.Setenv("TEST","test")
fmt.Println(os.Getenv("TEST"))
os.Unsetenv("TEST")
fmt.Println(os.Getenv("TEST"))
}
注意:上述操作,包括Clearenv只会影响程序当前运行环境中的环境变量。并不会对程序外的系统环境变量产生影响。所以当段代码运行结束时,系统的环境变量并不会发生改变。