首页 > 解决方案 > 构建不包括测试模块

问题描述

我的项目具有以下结构:

├── api
│   ├── api.go
│   ├── api_test.go
│   ├── other_files...
├── cmd
│   └── main.go

在 cmd/main.go 下,我有我的 Go 项目的入口点。

由于我还创建了一些测试文件,因此我还有其他用于测试目的的类。

我的 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.go时,我是否只选择main.go了代码中使用的正确模块及其所有引用,不包括go.mod用于测试类中列出的未使用模块?

是否有任何ldd命令可以确保我只链接所需的模块?
我认为 Go 已针对此进行了优化,但我想确定这一点。

标签: godependency-management

解决方案


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

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

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

go list -m all

从模块的根目录。这将列出为构建提供包的模块集。

Ref: go - 主模块和构建列表


推荐阅读