【问题标题】:Best practices for external benchmarks when using Go Modules使用 Go Modules 时外部基准测试的最佳实践
【发布时间】:2020-02-26 17:00:14
【问题描述】:

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

我现在正在将我的 repo 迁移到 go 模块。我不想在我的 go.mod 中使用这些第三方库,因为我的库在正常使用时不需要它们,而且我不想将我的模块不必要地绑定到这些库。

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

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

【问题讨论】:

  • 你对 go.mod 中的内容有什么顾虑?
  • 我认为您唯一的选择是将它们放在单独的子目录中,并带有自己的 go.mod 文件。
  • 为什么我的库的用户必须导入另一个第三方库,因为我有一个基准?充其量似乎没有必要,而且感觉更像是一种反模式。在 GOPATH 世界中,我通常不会费心运行测试,也不会导入其他库。

标签: go go-modules go-testing


【解决方案1】:

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

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

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

(并且https://golang.org/issue/36460 中的提案对该属性进行了加倍:如果实施,该提案将避免加载从不导入的包的依赖项,从而可能会删除依赖图的大块。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2021-11-06
    • 2011-06-29
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多