go获取最新的代码库
go get是go开发者非常常用的命令,在gomodule模式下,go代码在pkg/mod进行了统一管理。当我们使用IDE时,尽量使用go get下载go程序。因为IDE,如vscode的代码跳转和解析都依赖gopath和go mod的代码,不使用go get命令,便需要开发者自已进行代码结构的创建,git clone并不会把父路径进行创建,也不会将代码自动放到go的代码有效路径上。
作为开发者,这种程序管理的要求是应该遵守的。但是go get 比较奇怪的一点是,不会clone最新版本的代码。
% go get github.com/giongto35/cloud-game
go: github.com/giongto35/cloud-game upgrade => v1.0.0
由于go get的设定,强制要求下载最稳定最基础的版本。但是实际上这于go mod有点冲突。因为go mod是支持多版本的,比如说v1,v2,就算go mod明确指明了v2,依然会下载最小的版本。
虽然说可以指定版本。如果没有指明 version 的情况下,则默认先下载打了 tag 的 release 版本;如果没有 release 版本,则下载最新的 pre release 版本。如果还没有则下载最新的commit,而master的最新commit可能才是我们所需要的。
go get <path-to-repo>@<branch>
直接指定tag是不会采纳的。
% go get github.com/giongto35/cloud-game@v2.0.0
go get github.com/giongto35/cloud-game@v2.0.0: github.com/giongto35/cloud-game@v2.0.0: invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2
go get对最小最稳定的版本已经魔怔了。直接使用v2而不用@成功,v2使用根据go.mod的包名得出。@master也是不行的。
go get -u github.com/giongto35/cloud-game/v2
go: downloading github.com/giongto35/cloud-game/v2 v2.4.1
go: github.com/giongto35/cloud-game/v2 upgrade => v2.4.1
当然了,任何go get也不会有任何版本控制可言,git直接就会失效。只能说go的版本管理任重而道远啊。