在Mac终端运行go build一直报如下错误:
ioutil.go:4:2: cannot find package “fmt” in any of:
/usr/local/Cellar/go/1.10.2/src/fmt (from $GOROOT)
/Users/wangdejun/gopath/src/fmt (from $GOPATH)
不能找到src/fmt包,
>which go
>/usr/local/bin/go
明显环境变量$GOROOT和$GOPATH配置错误,
修改了.zshrc和.bashrc都不能改变这个环境变量,找到.bash_profile
修改~/.bash_profile
添加export GOPATH=/usr/local/bin/go
go build文件ok,问题解决。
好奇地查了一下.bashrc,.bash_profile以及.zshrc之间的区别:Shell配置文件之间的主要区别在于,有些配置比如.bash_profile只能被『登录』用户读取;另外的一些配置文件被非登录用户读取,比如.bashrc;还有一些配置比如~/.zshrc,无论登录和非登录用户都可以读取。
Mac OS X的终端Terminal.app实际上运行了『登录Shell』而不是『非登录shell』,那么就默认调用.bash_profile,而不是.bashrc。这样问题就明确了,在配置$GOROOT环境变量时,一定要在.bash_profile中配置才行。
【注】运行source ~/.bash_profile,source命令的作用就是用来执行一个脚本。我们知道./test.sh也可以执行test.sh脚本文件,那么source和直接执行有什么区别呢如果在一个脚本里export $PATH=111 ,用./test.sh执行该脚本,执行完毕后,运行 echo $PATH,发现没有值,如果你用source来执行 ,然后再echo ,就会发现PATH=111。
因为调用./test.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反映到父shell里,但是source与你执行./test.sh不同的是它就是在本shell中执行的,所以可以直接在父shell中看到结果