从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语句的末尾添加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

只需在你想要的提交哈希中“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

此外,如果在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 github.com/someone/some_module@af044c0995fe来获得特定的提交,你还可以使用分支名称,例如:

去github.com/someone/some_module@master 访问github.com/someone/some_module@dev_branch

这些示例获得相应分支上的最新提交。

它仍然会被记录为一个伪版本。Mod文件,例如v0.0.0-20171006230638-a6e239ea1c69。(这有助于提供基于标准semver排序的所有版本的简单总排序)。