背景
昨儿在搞项目引入包的时候,发现一个问题,在普通iterm2终端中可以go get到对应的包,但是在goland的IDE中打开相应项目,go get不到,且引用不到包。golang版本为homebrew安装的——1.16版本,需要拉取的包为公司内部的包。
解决过程
- 开始觉得很奇怪,为什么纯终端和IDE内部go get xxx所得到的结果不一样,于是在IDE做了个单文件的测试,也可以引用得到,并成功获取了结果,那么测试和项目的差别就在于go mod了。
2. 稍微查了一下,发现1.16的版本的go mod有重大更新,于是怀疑是不是go版本的一些新特性带来的问题,于是选择降了版本到v1.15,这里稍微多说一些。前边偷懒用homebrew装的,非常省心,一个命令行
brew install go,但这样带来的问题就是不可控,所以建议还是采用官方下载包,然后手动解压,自行定义环境变量。(这就是围城,里边的人想出去,外边的人想进来,自行选择就好)
- 于是golang官网下载1.15的包,并把homebrew的包删除(不删除似乎它的优先级更高),前边因为各种内往外网代理不统一,导致环境变量配置配置环境变量
# GO环境配置
export GOPATH=~/go
export GOROOT=~/go/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
# 采用内外代理,既可以获得内网包,也可以获得外网
export GOPROXY="xxx"
export GOSUMDB="xxx"
- 心里想,这会应该没啥问题,let me try一try,然后不出意外的出意外了,结果还是一样,全局go get没问题,项目内go get直接timeout,同事提示大概率跟proxy有关,让我在项目中执行两个命令再go get,这次居然成功了
# 查看当前环境变量
env
# 一次性无效两个代理
unset https_proxy
unset http_proxy
go get xxx
- 然后删除掉了其中的环境变量,但发现还是不行,后边找了半天才想起来IDE还有个手动设置,置为no_proxy就ok了
总结
因为内网以及国内网络网络问题,golang的环境问题很容易出现,注意配置好相应的代理,环境变量能简单就简单一些,否则很容易出现一个奇奇怪怪且找不到原因的错误