常规设置

首先Go Mod最好设置Goproxy,这样可以解决很多包拉取的问题:

1
go env -w GOPROXY="https://goproxy.cn,direct"

https://goproxy.io也可以,上面是国内的。

完成设置后,go 命令会从公共镜像 goproxy.io 上下载依赖包,并且会对下载的软件包和代码库进行安全校验,当你的代码库是公开的时候,这些功能都没什么问题。但是如果你的仓库是私有的怎么办呢?

环境变量 GOPRIVATE 用来控制 go 命令把哪些仓库看做是私有的仓库,这样的话,就可以跳过 proxy server 和校验检查,这个变量的值支持用逗号分隔,可以填写多个值,例如:

1
GOPRIVATE=*.corp.example.com,rsc.io/private

命令行设置:go env -w GOPRIVATE=private.repo.com

这样 go 命令会把所有包含这个后缀的软件包,包括 git.corp.example.com/xyzzy , rsc.io/private, 和 rsc.io/private/quux 都以私有仓库来对待。

若所有需要配置的私有仓库都存在于一个组织下,如 github 下的组织 org_name,则直接填写组织名即可:

1
GOPRIVATE=github.com/org_name

如果要更新不支持https协议的私有库,还需再做如下的配置。

  1. go get -insecure,但是很麻烦,每个包都需要手动在go mod下导入(go mod自己是不支持HTTP的,这么做是合理的);
  2. go env -w GOINSECURE=private.repo.com,设置GOINSECURE参数,非常方便。仅在go 1.14后新加入。

私有不合规的库

上一节是针对的库是私有的情况,但其依然是有局限的地方的,其就要求:

① 私有库是绑定有域名的;

② 端口是 443 或 80 端口;

怎么解决呢,这里我推荐文章:Go Module:私有不合规库怎么解决引用问题 。以下方法均出自该文章,建议直接读原文最nice。

这里借用了现成的版本控制系统(VCS),go get获取包时,会发送一个 HTTP 请求,URL为模块带上协议头和参数( go-get=1 ),去探测目标服务器是否是代码托管服务器,服务器会依此返回一个数据类型,响应Go工具,符合其要求。

简洁的直接将其摆出来,既是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 使用Git替换掉原始的Git地址
yu@xxx:~$ git config --global url."http://vitogo.tpddns.cn:9000/".insteadof "https://studygolang.com/"

# 将gitea.com设置为私有库,不经过校验,gitea也可以换成其它公有托管服务
yu@xxx:~$ go env -w GOPRIVATE=gitea.com

yu@xxx:~$ curl https://gitea.com/zanghong/testgo?go-get=1

<!doctype html>
<html>
<head>
<meta name="go-import" content="gitea.com/zanghong/testgo git https://gitea.com/zanghong/testgo.git">
<meta name="go-source" content="gitea.com/zanghong/testgo _ https://gitea.com/zanghong/testgo/src/branch/master{/dir} https://gitea.com/zanghong/testgo/src/branch/master{/dir}/{file}#L{line}">
</head>
<body>
go get gitea.com/zanghong/testgo
</body>
</html>

yu@xxx:~$ go get -v gitea.com/zanghong/test
get "gitea.com/zanghong/test": found meta tag get.metaImport{Prefix:"gitea.com/zanghong/test", VCS:"git", RepoRoot:"https://gitea.com/zanghong/test.git"} at //gitea.com/zanghong/test?go-get=1
gitea.com/zanghong/test (download)
gitea.com/zanghong/test