Heim > Backend-Entwicklung > Golang > Fehler „Lauftext nicht beendet' beim Versuch, gofmt -r mit exec.Command auszuführen

Fehler „Lauftext nicht beendet' beim Versuch, gofmt -r mit exec.Command auszuführen

WBOY
Freigeben: 2024-02-11 18:10:07
nach vorne
780 Leute haben es durchsucht

尝试使用 exec.Command 运行 gofmt -r 时出现“符文文字未终止”错误

php-Editor Yuzi hat beim Ausführen von gofmt -r mit exec.Command den Fehler „Runetext nicht beendet“ festgestellt. Dieser Fehler kann durch ein Symbol im Befehl verursacht werden, das nicht korrekt beendet wird. Um dieses Problem zu lösen, können wir überprüfen, ob die Symbole im Befehl richtig gepaart sind, und sicherstellen, dass jedes Symbol das richtige Abschlusszeichen hat. Versuchen Sie alternativ, Escape-Zeichen zu verwenden, um Befehle zu verarbeiten, die spezielle Symbole enthalten. Ich hoffe, dass diese Methoden Entwicklern helfen können, die auf das gleiche Problem stoßen!

Der Inhalt der Frage

befindet sich in der folgenden Verzeichnisstruktur:

.
├── foo.go
├── go.mod
└── main.go
Nach dem Login kopieren

Ich habe ein foo.go, das eine einfache Typdefinition hat:

package main

type foo struct {
    baz string
}
Nach dem Login kopieren

Wenn ich ngofmt -r über die Befehlszeile ausführe, um den Variablennamen zu ersetzen, funktioniert es:

> gofmt -r 'foo -> bar' foo.go
package main

type bar struct {
    baz string
}
Nach dem Login kopieren

Aber wenn ich versuche, dieses Programm zu verwenden, um dies von main.go

zu tun
package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    combinedoutput, err := exec.command("gofmt", "-r", "'foo -> bar'", "foo.go").combinedoutput()
    if err != nil {
        log.fatalf("gofmt foo.go: %v. combined output: %s", err, combinedoutput)
    }
    fmt.println(string(combinedoutput))
}
Nach dem Login kopieren

Ich erhalte die Fehlermeldung:

> go run main.go
2023/01/14 23:42:07 gofmt foo.go: exit status 2. Combined output: parsing pattern 'Foo  at 1:1: rune literal not terminated
exit status 1
Nach dem Login kopieren

Wissen Sie, was es verursacht hat?

Problemumgehung

Sie müssen nicht zitieren exec.command 的参数;引用是 shell 的一项功能,在进行系统调用时不适用。也没有必要,因为在 shell 中引用是为了描述参数,但在 exec.command, wenn die Argumente in Argumente für den Funktionsaufruf aufgeteilt werden.

Spezifisch:

exec.command("gofmt", "-r", "'foo -> bar'", "foo.go")
Nach dem Login kopieren

sollte sein

exec.Command("gofmt", "-r", "Foo -> Bar", "foo.go")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonFehler „Lauftext nicht beendet' beim Versuch, gofmt -r mit exec.Command auszuführen. 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