为了账号安全,请及时绑定邮箱和手机立即绑定

不包含测试模块的构建

不包含测试模块的构建

Go
米琪卡哇伊 2022-08-01 17:33:32
我的项目具有以下结构:├── api│   ├── api.go│   ├── api_test.go│   ├── other_files...├── cmd│   └── main.go在cmd/main.go下,我有我的Go项目的入口点。由于我还在创建一些测试文件,因此我还有其他用于测试目的的类。My go.mod 是这样的:require (    github.com/gorilla/mux v1.8.0    github.com/stretchr/testify v1.6.1          <-used for test    gotest.tools v2.2.0+incompatible            <-used for test     k8s.io/api v0.19.0    k8s.io/apimachinery v0.19.0    k8s.io/client-go v0.19.0)我的疑问与构建阶段有关:在执行此操作时,我是否只选择代码中使用的正确模块及其所有引用,不包括用于测试类中列出的未使用模块?go build ./cmd/main.gomain.gogo.mod是否有任何命令可以确保我只链接所需的模块?我假设Go已经优化了这样做,但我想确定这一点。ldd
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

当 go 正常构建软件包时(或),它将忽略任何具有名称模式的文件。这意味着仅从这些测试文件导入的任何包的目标代码都不会链接到可执行文件中。go buildgo install*_test.go

因此,如果您只是小心不要从非测试代码中导入测试包,那么您就很好。

如果您不确定,可以通过运行以下命令来检查“构建列表”:

go list -m all

从模块的根目录开始。这将列出为生成提供包的模块集。


查看完整回答
反对 回复 2022-08-01
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

当您运行 时,它将:go build

  • 检查正在构建的包中的语句import

  • 检查每个导入的包中的语句import

  • ...依此类推,直到它找到所有传递依赖项。

  • 然后,对于要生成的每个包,它会检查生成约束,并生成未排除的文件。 默认情况下,文件是排除的,在生成测试时显式包含它们。*_test.gogo test

这意味着:

  • 测试文件不会包含在非测试版本中,除非您显式包含它们。

  • 完全不会包含未引用的包。

  • 其中的内容与生成无关:它仅用于依赖项管理,而不是编译。go.mod


查看完整回答
反对 回复 2022-08-01
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信