如果你刚转Go开发,可能会碰到"go get拉取依赖报错"、"ide拉包超时"这样的问题。
调好一些配置才能流畅的用Go开发,本文对此做了介绍
下载
Go官网被墙了,我从官网下载后上传到了百度云盘,链接如下:
Go 1.14.3 mac 提取码: 5nmnpan.baidu.com Go 1.14.3 linux 提取码: eg9mpan.baidu.com将go 命令放入path
解压下载的压缩包,得到文件夹 go
,go
命令在go/bin/go
。假设go文件夹在你的家目录,
- 对于mac,运行命令:
echo "PATH=$PATH:~/go/bin" >> ~/.bash_profile
- 对于ubuntu,运行命令:
echo "PATH=$PATH:~/go/bin" >> ~/.bash_rc
此时启动一个新shell,运行go version
,可看到:
![ccae483d03483d7fc064f76646d01a16.png](https://i-blog.csdnimg.cn/blog_migrate/8062727c688b98c82fc042d6b603b89c.png)
说明:将go命令所在目录加入path中,从而可在任意位置执行go命令
配置go mod环境变量(以拉到被墙的包)
export GOPROXY=https://goproxy.cn,direct
export GO111MODULE=on
- 对于mac,将如上代码写入~/.bash_profile,复制粘贴进去即可
- 对于ubuntu,将如上代码写入~/.bash_rc
启动一个新shell,运行命令go get golang.org/x/tools/cmd/callgraph
,相应包安装成功:
![4412c301e1e844f49227ffbbc57094e2.png](https://i-blog.csdnimg.cn/blog_migrate/b583549f2cb4d5fcec06470b0d52416c.png)
说明:
GOPROXY=https://goproxy.cn,direct
的作用是:使用 "goproxy.cn" 作为拉取依赖的代理,当请求的包不存在时跳过代理(如不设置,默认代理为一个被墙的地址:"proxy.golang.org")GO111MODULE=on
的作用是:GO111MODULE的默认值为auto,即:仅当当前目录下有go.mod文件,才使用GOPROXY下载包。将该值设置为on可确保在任何地方使用proxy拉包,从而不会有拉不到被墙的包的情况
详情参考:干货满满的 Go Modules 和 goproxy.cn
配置GOPATH(以便在命令行直接运行go get安装的命令)
export GOPATH=~/.go
export PATH=$PATH:$GOPATH/bin
- 对于mac,将代码写入~/.bash_profile,复制粘贴进去即可
- 对于ubuntu,将代码写入~/.bash_rc
启动一个新shell,执行go get golang.org/x/tools/cmd/callgraph
,再执行which callgraph可以看到 callgraph的安装位置
![f077cc058c5c82880331384c4520e89c.png](https://i-blog.csdnimg.cn/blog_migrate/4fa58acb62b620a001607f13b4faf000.png)
说明:
如上文示例,执行go get golang.org/x/tools/cmd/callgraph
后,
- callgraph默认安装在$GOPATH/bin/callgraph ,没有配置的情况下运行
callgraph
显示command not found,需要将$GOPATH/bin加入path - GOPATH日后主要存放go get安装的依赖,最好文件夹命名以"."作为前缀隐藏起来,其默认值为~/go,我习惯更改为~/.go
配置private git仓库
默认私有仓库的依赖(例如公司内部gitlab仓库)是无法用go get拉取到的,假设私有仓库的hostname为http://git.mycompany.net,需要做如下配置:
- 运行命令:
git config --global url."git@git.mycompany.net:".insteadOf "https://git.mycompany.net/"
- 对于mac,运行命令:
echo "GOPRIVATE=git.mycompany.net" >> ~/.bash_profile
对于ubuntu,运行命令:echo "GOPRIVATE=git.mycompany.net" >> ~/.bash_rc
说明:
- 配置git,访问http://git.mycompany.net时使用git协议(而不是https),从而获得ssh私钥提供的身份信息。否则会因为缺失身份信息而无法拉取依赖
- 配置GOPRIVATE环境变量,标记域名http://git.mycompany.net的包属于私有仓库,不做module的sum校验,否则拉取私有库会失败
详情参考:stackflow相关问题
配置IDE(使IDE能够自动拉取依赖)
大部分Go开发可能会使用Goland
。由于习惯,我使用Intellij
,配置过程类似。如下:
![7fbe5df3bc782377927db48117bb963b.png](https://i-blog.csdnimg.cn/blog_migrate/e2af8df6cb882830fe8712e9657bda46.jpeg)
![f0b80e735c846e5876a795ca5ee3a259.png](https://i-blog.csdnimg.cn/blog_migrate/1bbc83c2fb0cdf0f66d3c925ef23041e.jpeg)