go - 使用 Go Modules 时外部基准测试的最佳实践

标签 go go-modules go-testing

我有一个 Go 存储库,其中有一些基准测试(在 _test 后缀包中)。这些基准测试将它与一些第三方库进行了比较。我没有在我的非基准代码中使用这些库。

我现在正在将我的存储库迁移到 go 模块。我不希望我的 go.mod 中有那些第三方库,因为我的库不需要它们来正常使用,而且我不想将我的模块不必要地绑定(bind)到那些。

推荐的 go-mod 方法是什么?我的想法:

  • 在基准上构建标签
  • 另一个仓库的基准
  • 我模块中的模块

最佳答案

如果有人想要运行您的基准测试(例如,检查其规定的结果是否适用于他们的机器配置),那么他们需要知道这些基准测试最初运行时使用的依赖项版本。重现您的测试和基准测试结果所需的信息属于您的 go.mod 文件。

但请注意,“拥有最低版本”与“导入”不同。

如果用户构建了您的包但没有构建和运行其测试,或者如果他们在您的模块中构建了一些其他包,那么他们将不需要下载源代码 用于基准依赖项即使该依赖项包含在您的 go.mod 文件中。

(并且 https://golang.org/issue/36460 中的提案对该属性加倍下调:如果实现,该提案将避免加载从未导入的包的依赖项,可能会删除依赖关系图中的大块。)

因此,如果您真的不希望用户必须构建基准的依赖项,请将基准与您希望用户导入的包放在一个单独的包中。

关于go - 使用 Go Modules 时外部基准测试的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418936/

相关文章:

go - 用于运行Golang代码以进行调试和运行的文件路径

go - 为什么 golang Web 处理程序内的文件 "writing"之后的消息不显示?

go - 如何使用 Go Modules 识别依赖链

go - 使用 vendor 目录中的本地依赖项时发生编译错误

go - 使用 go 模块将 retool 替换为 tools.go 用于多开发人员和 CI 环境

go - 运行测试用例时,模拟方法在 golang 中不起作用

GO 在测试设置方法中附加标准输入

xml - Golang:将xml转换为gzip时出现问题

go - Go 中的自定义字符串类型

unit-testing - 如何模拟Viper config getter