问题描述
os.Getenv("GOPATH")获取不到,但是os.Getenv("HOME")可以正常得到
问题出现的环境背景及自己尝试过哪些方法
在终端中,ech $GOPATH正常输出,GOPATH变量写在了~/.bashrc文件中,os.Getenv("GOPATH")获取不到
后来尝试把GOPATH变量写在~/.profile, /etc/profile, /etc/environment中,都不行
os.Getenv("")中,HOME、PATH这些变量能够正常输出,但是自定义的GOPATH、GOROOT都不行
相关代码
main.go:
package main
import (
"os"
)
func main() {
println(os.Getenv("HOME"))
println(os.Getenv("GOPATH"))
}
终端:
zll@loong:~$ echo $GOPATH
/home/zll/go
zll@loong:~/temp$ go run main.go
/home/zll
zll@loong:~/temp$
问题出现的平台版本
Ubuntu18.04
go 1.11.2
额外关联
使用go的第三方工具viper解析环境变量时,同样的只能得到PATH、HOME这些系统变量,自定义得不到。
package main
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
viper.AutomaticEnv()
if env := viper.Get("GOPATH"); env == nil {
println("error!")
} else {
fmt.Printf("%#v\n", env)
}
}
结果:
error!
不知道这之间有没有联系?求解答
终于找到问题出在哪了!!!
写在.bashrc中的环境变量没有用export命令!执行main.go,子shell中,那是肯定获取不到的!当初图省事。。。
解决办法:
.bashrc文件中,设置环境变量语句前加上export即可。
另外,对于viper,是按照大写找的,如果环境变量中有小写,是找不到的!