go get更换国内镜像源

2022-06-16 11:16:59

在VSCode配置golang开发环境时,我们一般使用golang提供的go插件,而这个插件会使用go get命令去从golang.org下载对应的包。因为众所周知的原因,这个过程经常会失败,因此必须要为go get更换国内镜像源。

由于历史原因,go的软件包会通过GOPATH和module两种方式去管理,而不同管理方式下go get所下载的源也不同,因此go的换源会比其他语言更加麻烦,要用两步来完成:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn

第一个命令,是将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。

  • 作者:goldVitaminC
  • 原文链接:https://blog.csdn.net/weixin_42871822/article/details/117096038
    更新时间:2022-06-16 11:16:59