通常我们见到的Golang库地址都是其他人所写的,并且托管在 http://github.com,http://golang.org等平台下,如果我们自己想模块化一些封装库,并且想用中国自己的 http://gitee.com托管,需要注意以下几点:


1. go mod init

这个命令用来初始化go mod的,一般创建工程第一步就是执行这个命令,这时候就要提前规划好自己库的托管平台和最终的git地址,如果希望托管到http://gitee.com平台,需要初始化合适的包名,比如:

go mod init gitee.com/newflydd/gmorm
go mod initgo.mod
go.sumgo get
go get: gitee.com/newflydd/gmorm@v0.1.3: 
parsing go.mod: module declares its path as: gmorm 
but was required as: gitee.com/newflydd/gmorm


2. git tag

git tagtag
git add . 
git commit -m "test" 
git tags v0.1.0 
git push --tags


3. go get

git pushgo getgo getGOPROXYGOPROXYhttps://proxy.golang.org/gitee.com/newflydd/gmorm/@v/list
GOPRIVATEgo get
export GOPRIVATE=gitee.com

这里再提一句,`go get`一旦发现`https://proxy.golang.org/gitee.com/newflydd/gmorm`代理中没有收录你的库,会直接报错,甚至都不会去你指定的URL上去下载,我怀疑是不是在不指定`GOPROXY`时,会有一个默认值`GOPROXY=proxy.golang.org,direct`,一旦报错就中止,这也太扯了。

如果在执行`go get`命令之前,强制一个`export GOPROXY=direct`,就可以直接去指定地址下载库了,但是后面还是提示sum校验不正确,所以仍然是要设置`GOPRIVATE`环境变量。

Golang似乎是希望使用这种方式增加引入第三方库的安全性,毕竟之前出现过开源项目翻车的案例。


4. git config

我们知道git clone包括go get的背后,都是使用https去下载的。我发现,即使把项目开源,但有时候也会提示需要用户名密码或者提示权限问题,网上说这是因为https的问题。

这时候需要指定这些库不使用https下载,而使用ssh下载,比如执行以下命令:

git config --global url."git@gitee.com:".insteadOf "https://gitee.com/" 
cat ~/.gitconfig