一、使用https://goproxy.cn的代理
在VSCode配置golang开发环境时,我们一般使用golang提供的go插件,而这个插件会使用go get命令去从golang.org下载对应的包。因为众所周知的原因,这个过程经常会失败,因此必须要为go get更换国内镜像源。
由于历史原因,go的软件包会通过GOPATH和module两种方式去管理,而不同管理方式下go get所下载的源也不同,因此go的换源会比其他语言更加麻烦,要用两步来完成:
1.建议go版本在1.13以上
go version
2.打开你的终端并执行
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
第一个命令,是将GO111MODULE从auto模式修改为on模式。如前面提到的,go有两种包管理方式
现在速度应该杠杠的!
- GOPATH方式:早期方式,会将下载的包放入GOPATH/src目录下,然后只有GOPATH/src中的包是能被程序导入的
- module方式:更现代的方式,通过在项目目录中生成go.mod文件来管理需要的包,此时go还可以导入网络上的包、本目录的包,然后缺少的包会被缓存到GOPATH/pkg目录下
GOPROXY只能修改module方式的下载源。而go get是通过哪种方式下载包,go怎样管理包依赖,取决于GO111MODULE的设置:
- auto模式下,有go.mod文件的目录下执行go get会走module方式,而没有的目录会走GOPATH方式。
- on模式下,全部都走module方式
因此为了让我们的proxy在任意目录下都生效,我们必须使用GO111MODULE=on来启用module方式,然后修改为国内源。笔者也更建议一直在on模式下使用go,没有go.mod的项目,用go mod init [模组名]生成一个就好了- -
修改后就可以从代理下载包了,如果下载的源并没有变化,可以试试重启shell/IDE orz。
https://codeleading.com/article/93635617638/
二、使用阿里云的代理
export GOPROXY=https://mirrors.aliyun.com/goproxy/
注意:
如果执行了go env -w GO111MODULE=on,会导致下载的包不在src/github.com/下,而是在pkg包下。怎么解决呢?
在src下执行:
go mod init 模块名
会生成一个go.mod文件,然后在具体的代码中import需要的包,例如:
import "gorm.io/gorm"
开始可能会报错,执行重新同步后会在go.mod中生成下面的内容:
module workspace
go 1.15
require (
github.com/gomodule/redigo v1.8.4
github.com/smartystreets/goconvey v1.6.4
gopkg.in/ini.v1 v1.62.0
gorm.io/gorm v1.21.2
)
然后引入的包就正常了。