让我们一起爱米兰
站内搜搜:
移动设备
请扫描二维码
或访问
m.milan100.com
您所在的位置 -> 米兰百分百 -> golang -> 编写自己的Golang库并托管到gitee

编写自己的Golang库并托管到gitee

点击数:8294 发表时间:2023-01-06 16:42:41 作者: 来源链接:
分享到:
分享到微信

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


1. go mod init

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

go mod init gitee.com/newflydd/gmorm

所以,创建工程的第一步并不是那么随意,需要跟最后一步提交工程到托管平台相互呼应,当然,你还可以go mod init之后再去修改go.mod文件,设置合适的模块名称。

如果最终发布的URL与go.sum中的模块名不一致,则别人使用go 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

每个合法的golang库的git地址,需要配置一个git tag,这个tag的名称也不允许乱起,一定要是一个合法的版本名称,使用git tag命令在最后一次commit的版本上打上tag,比如执行以下命令:

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


3. go get

git push到仓库后,解下来就是在另外的工程中使用go get引入这个模块了。要注意的是,目前go get的版本有点神奇,你最好关注一下环境变量GOPROXY,我这边测试下来,即使GOPROXY不设置任何值,它依然会首先搜索https://proxy.golang.org/gitee.com/newflydd/gmorm/@v/list这种代理库地址,显然我们没有必要去这些乱七八糟的平台都注册一遍自己的库,只想静静地封装自己的模块,让自己和其他朋友以后的工程能够自由引入和调用。

这里要设置GOPRIVATE环境变量,让go get的时候,对一些特定的库不要使用代理,直接去我们指定的URL下载,也不要去校验sum值,比如执行:

export GOPRIVATE=gitee.com

这里再提一句,`go get`一旦发现`proxy.golang.org/gitee.`代理中没有收录你的库,会直接报错,甚至都不会去你指定的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


5
很 好
4
一 般
4
差 劲
热门新闻
相关文章
上一篇:
下一篇: cannot find package "golang.org/x/sys/unix"解决方案
评论区
匿名

返回首页 | 收藏本页 | 回到顶部
Copyright 2010. 米兰百分百 Powered By Bridge.
京ICP备15050557号