公开库与私有库
go mod除了用作模块化开发之外,也是新版本go源码库的私有与共有的重要途径。
module gitee.com/xvwen/gocmd/cwgogengo 1.21.5
在go mod中module的名称规定了该源码是否共有,如果该名称与远程git仓库地址一致,则该源码可以通过go get
获取到,此时为共有库。否则为私有库,go get
无法获取。
一个go.mod
控制当前文件下所有文件的公有性。例如http_response
,qrcode
和go mod在同一文件夹下那么要获取到对应源文件的地址就是go get gitee.com/xvwen/go-component/http_response
和go get gitee.com/xvwen/go-component/qrcode
。
gitee.com/xvwen/go-component
为根路径。
go get任意一个源文件都是将整个仓库的源文件都下载。
版本控制
在使用上一节的规则提交代码后,获取远程仓库代码是又遇到了问题,当本地使用go get
获取一个版本的源码后,又更新了远端仓库,此时再次go get
一下go get gitee.com/xvwen/gocmd/cwgogen
此时发现了一个重要问题,没有版本控制。
使用go get时应该是go get xxx@version
,而上述的代码却没有版本控制,看到gopath/pkg
如下:
再使用go get
命令后已经获取到了最新的版本,但是项目的版本却没有变,如下:
解决这个问题可以在go get的路径后面添加一个@latest
每次获取最新的版本,没有版本控制的话默认是本地版本。
可以看到即使美誉认为控制版本,系统可以自动生成版本号,这个版本号规则是v0.0.0-时间-git commit id
这个默认值很长也不好使用,比例与版本切换。
git tag
是 Git 中用于为某个特定的提交(commit)创建标签的命令。标签是一个指向某个提交的引用,可以帮助你在代码库中标记重要的里程碑、版本或发布。标签通常用于表示软件版本号,以及代码库中的重要事件。
在git仓库中,git tag是作为仓库中版本控制的,使用git作为go语言源码的公开库,显然也必须如此,go底层已经完成了解析go get xxx@version的version就对应git tag。