So führen Sie „go test' im übergeordneten Verzeichnis mehrerer go-Module aus und geben bei einem Fehler einen Wert ungleich Null zurück

王林
Freigeben: 2024-02-05 23:48:03
nach vorne
769 Leute haben es durchsucht

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

Frageninhalt

Sehen Sie sich diese Verzeichnisstruktur an:

/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
Nach dem Login kopieren

Sie können den Test mit dem folgenden Code ausführen, aber er gibt immer den Exit-Code 0 zurück, wenn er fehlschlägt.

find . -name go.mod -execdir go test ./... \;
Nach dem Login kopieren

Gibt es eine Möglichkeit, einen Wert ungleich Null zurückzugeben, wenn dies fehlschlägt?


Richtige Antwort


Verwenden Sie diesen Befehl:

find . -name go.mod -execdir go test ./... -- {} +
Nach dem Login kopieren

find命令手册关于-execdir命令{} +:

find gibt einen Exit-Status ungleich Null zurück, wenn ein Aufruf mit der „+“-Form einen Wert ungleich Null als Exit-Status zurückgibt. Wenn find auf einen Fehler stößt, führt dies manchmal zu einem sofortigen Beenden, sodass einige ausstehende Befehle möglicherweise überhaupt nicht ausgeführt werden.

Aber go test 不需要 find passende Dateien im Befehl. Tatsächlich wird es so scheitern:

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

schlägt fehl, da go.mod als Paket interpretiert wird.

Die Lösung ist in {} + 之前添加终止符 --. Siehe Befehlszeilen-Flag-Syntax:

Flag-Parsing stoppt vor dem ersten Nicht-Flag-Argument („-“ ist ein Nicht-Flag-Argument) oder nach dem Abschlusszeichen „--“.

Das obige ist der detaillierte Inhalt vonSo führen Sie „go test' im übergeordneten Verzeichnis mehrerer go-Module aus und geben bei einem Fehler einen Wert ungleich Null zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage