不包含测试模块的构建

我的项目具有以下结构:


├── 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


米琪卡哇伊
浏览 159回答 2
2回答

aluckdog

当 go 正常构建软件包时(或),它将忽略任何具有名称模式的文件。这意味着仅从这些测试文件导入的任何包的目标代码都不会链接到可执行文件中。go buildgo install*_test.go因此,如果您只是小心不要从非测试代码中导入测试包,那么您就很好。如果您不确定,可以通过运行以下命令来检查“构建列表”:go&nbsp;list&nbsp;-m&nbsp;all从模块的根目录开始。这将列出为生成提供包的模块集。

梦里花落0921

当您运行 时,它将:go build检查正在构建的包中的语句import检查每个导入的包中的语句import...依此类推,直到它找到所有传递依赖项。然后,对于要生成的每个包,它会检查生成约束,并生成未排除的文件。 默认情况下,文件是排除的,在生成测试时显式包含它们。*_test.gogo test这意味着:测试文件不会包含在非测试版本中,除非您显式包含它们。完全不会包含未引用的包。其中的内容与生成无关:它仅用于依赖项管理,而不是编译。go.mod
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go