Heim  >  Artikel  >  Backend-Entwicklung  >  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
WBOYnach vorne
2024-02-11 18:10:07663Durchsuche

尝试使用 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

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

package main

type foo struct {
    baz string
}

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
}

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))
}

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

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")

sollte sein

exec.Command("gofmt", "-r", "Foo -> Bar", "foo.go")

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen