从v1.11开始,Go添加了对模块的支持。命令

go mod init <package name>
go build

会产生go。Mod and go。求和包含所有找到的包依赖项版本的文件。

如果模块没有任何版本,则使用该模块的最新提交。如果一个模块确实有版本,则会选择最新的版本作为依赖。

然而,有时我需要尚未发布的版本中的功能,但来自该版本之后提交的功能。我怎么开始。Mod指向的不是模块的发布,而是模块存储库中的特定提交?

看起来我可以在go中徒手完成。国防部和

module /my/module

require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)

其中v0.0.0不对应于最后发布的版本标签,20181121201909将是提交时间戳,af044c0995fe将是提交哈希?这些信息是否应该手工查找和输入,还是有更好的方法?


当前回答

此外,如果在go中将单词latest替换为标记。Mod文件它将被更改为模块的最新标签。

例如:

module /my/module

require (
...
github.com/someone/some_module latest
...
)

将成为

module /my/module

require (
...
github.com/someone/some_module v2.0.39
...
)

运行后去mod整理

其他回答

一段时间以来,我一直在思考它是如何为每个人工作的,而我却无法运行它。对我来说,我必须承诺主分支,然后只有我能够得到它。

为了go使用特定的分支,提交id或标记,您需要通过运行以下命令为go模块启用一个标志

go env -w GO111MODULE=on

在这之后,我们就能做了

go get repo@branchname
go get repo@tag
go get repo@commithash

此外,如果在go中将单词latest替换为标记。Mod文件它将被更改为模块的最新标签。

例如:

module /my/module

require (
...
github.com/someone/some_module latest
...
)

将成为

module /my/module

require (
...
github.com/someone/some_module v2.0.39
...
)

运行后去mod整理

只需在你想要的提交哈希中“go get”:

go get github.com/someone/some_module@af044c0995fe

'go get'将正确地更新依赖文件(go。国防部,go.sum)。

更多信息:https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies

如果你想临时替换一个本地目录的依赖项(例如同时处理两个模块),你可以在go语句的末尾添加replace语句。国防部文件:

module example.com/mypkg

go 1.15

require (
  gitlab.com/someone/a_package v0.14.2
)

replace gitlab.com/someone/a_package => ../my_forks/a_package

Download source from branch go get your-repo@branch-name read output with go module version to be added to require or replace: go: downloading github.com/your-repo v1.2.3-0.20210609123456-123123123 Later this version can be found as output string of the following command go list -m -json your-repo@branch-name | jq '.|"\(.Path) \(.Version)"' If jq is not installed on your PC - manually combine Path and Version values of result from: go list -m -json your-repo@branch-name separated by space:your-repository v1.2.3-0.20210609123456-123123123