You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多Go模块父目录运行go test并在测试失败时返回非零码

解决Go测试失败时返回非零退出码的问题

原命令find . -name go.mod -execdir go test ./... \;测试失败时始终返回0,核心原因是**find的退出码仅反映自身执行是否正常,不会传递-execdir中go test的退出结果**——只要find完成了文件遍历与命令执行,不管测试成功与否,它都会返回0。

以下是几种实现测试失败时返回非零值的方法:

方式一:用Shell循环替代find

直接遍历所有go.mod文件,逐个进入对应目录执行测试,一旦某组测试失败就立即终止并返回非零码:

for mod in $(find . -name go.mod); do
    cd "$(dirname "$mod")" && go test ./... || exit 1
    cd - >/dev/null
done

方式二:用find配合bash子命令

通过bash子命令捕获go test的退出状态,失败时让整个命令链返回非零:

find . -name go.mod -execdir bash -c 'go test ./... || exit 1' \; | true; [ ${PIPESTATUS[0]} -ne 0 ] && exit 1

或者利用find的-o选项,在子命令失败时触发退出逻辑:

find . -name go.mod -execdir go test ./... \; -o -exit 1

方式三:使用xargs结合Shell命令

通过xargs传递目录路径,在Shell子进程中执行测试,任意一组测试失败都会让整个命令返回非零:

find . -name go.mod | xargs -I {} bash -c 'cd "$(dirname {})" && go test ./...'

内容的提问来源于stack exchange,提问作者kyoshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:30:20