ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 ~~~ # go代理 export GOPROXY=https://goproxy.cn # export GOPROXY=https://goproxy.io #export GOPROXY=http://mirrors.aliyun.com/goproxy/ ~~~ `go env -w GOPROXY=https://goproxy.cn,direct`即可。之所以在后面拼接一个`,direct`,是因为通过这样做我们可以在一定程度上解决私有库的问题(当然,goproxy.cn无法访问你的私有库)。这个`GOPROXY`设定的工作原理是:当`go`在抓取目标模块时,若遇见了 404 错误,那么就回退到`direct`也就是直接去目标模块的源头(比如 GitHub) 去抓取。而恰好,GitHub 等类似的代码托管网站的原则基本都是“你无权访问的你来说就是不存在的”,所以我才说通过这样设定可以在一定程度上解决私有库无法通过模块代理访问的问题。 https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md#%E7%94%A8%E6%B3%95 # 在1.13之前怎么设置 同样也是设置环境变量即可,但是得你手动配置,而且还不能使用上述的那个`,direct`后缀,因为那是 Go 1.13 刚加的特性 # 在 Go 1.13 中如何防止从公共模块代理中抓取的模块被篡改? 答:Go 1.13 新推出了一个`GOSUMDB`(默认值是[sum.golang.org](https://sum.golang.org/),国内无法访问),就是为了实现这个目的,它的值是一个可信任的模块校验和数据库地址,通过指定它,`go`将在抓取完模块时(无论是否是经过模块代理抓取的)对所有模块进行哈希校验,只有和校验和数据库中现有的一致时才算抓取成功。同`GONOPROXY`一样,Go 1.13 也为`GOSUMDB`配对发布了一个`GONOSUMDB`,用法一致,作用是控制`go`应该忽略校验哪些 module path 下的模块。 # 问:分别设置`GONOPROXY`和`GONOSUMDB`很麻烦,有没有更好的办法? 答:有,Go 1.13 为了方便管理私有库规则,还推出了一个`GOPRIVATE`,可以简单地理解成通过设置它就同时设置了`GONOPROXY`和`GONOSUMDB`。