首頁  >  文章  >  後端開發  >  如何在多個go模組的父目錄中執行“go test”並在出現錯誤時傳回非零

如何在多個go模組的父目錄中執行“go test”並在出現錯誤時傳回非零

王林
王林轉載
2024-02-05 23:48:03761瀏覽

如何在多个go模块的父目录中运行“go test”并在出现错误时返回非零

問題內容

看看這個目錄結構:

/root
    /hoge
        go.mod
        go.sum
        main.go
        /test
           main_test.go
           /unit
              sub_test.go
    /fuga
        go.mod
        go.sum
        main.go
        /test
           main_test.go

您可以使用以下程式碼執行測試,但如果失敗,它將始終返回退出程式碼 0。

find . -name go.mod -execdir go test ./... \;

如果失敗,有沒有辦法回傳非零值?


正確答案


使用此指令:

find . -name go.mod -execdir go test ./... -- {} +

find指令手冊關於-execdir指令{}

如果任何使用「 」形式的呼叫傳回非零值作為退出狀態,則 find 傳回非零退出狀態。如果 find 遇到錯誤,有時會導致立即退出,因此某些掛起的命令可能根本無法運作。

但是 go test 不需要 find 指令中的符合檔。事實上,它會這樣失敗:

$ go test ./... go.mod
no required module provides package go.mod; to add it:
    go get go.mod

失敗是因為 go.mod 被解釋為一個套件。

解決方法是在 {} 之前加入終止符 --。請參閱命令列標誌語法

標誌解析在第一個非標誌參數(“-”是非標誌參數)之前或終止符“--”之後停止。

以上是如何在多個go模組的父目錄中執行“go test”並在出現錯誤時傳回非零的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除