首页  >  文章  >  后端开发  >  如何在具有多个 Go 模块的父目录中运行“go test”?

如何在具有多个 Go 模块的父目录中运行“go test”?

Patricia Arquette
Patricia Arquette原创
2024-11-02 21:51:30865浏览

How to Run `go test` in a Parent Directory with Multiple Go Modules?

在多个 Go 模块的父目录中运行 go test

当使用包含多个 go 模块的目录结构时,例如:

<code class="pre">/root
    /one
        go.mod
        go.sum
        main.go
        main_test.go
    /two
        go.mod
        go.sum
        main.go
        main_test.go</code>

执行 go 测试。或者从根目录(/root)执行 go test ./... 可能会导致错误,表明未找到任何包。这是因为 go test 期望在单个模块上运行。

要克服此限制,一种方法是使用 shell 技巧。例如,以下命令应遍历子目录并在每个子目录中执行 go test ./...:

<code class="pre">find . -type d -name main_test.go -exec go test '{}/' \;</code>

或者,许多项目实现执行此操作的 Makefile 或测试脚本。例如,test.sh 脚本可以包括:

<code class="pre">for i in $(find . -type d -name main_test.go | sed 's|main_test.go||'); do
    cd $i
    go test ./...
    cd ..
done</code>

此脚本将循环遍历存储库,更改到包含 main_test.go 文件的每个子目录,执行 go test ./...,然后返回到父目录。

较大的项目可能会维护所有模块的列表,例如由 go-cloud 项目维护的列表 (https://github.com/google/go-cloud/blob/主/所有模块)。脚本可以使用此列表来迭代模块并执行各种操作,包括运行测试。

以上是如何在具有多个 Go 模块的父目录中运行“go test”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn