L'éditeur PHP Yuzi a rencontré une erreur "texte de rune non terminé" lors de l'exécution de gofmt -r à l'aide de exec.Command. Cette erreur peut être provoquée par un symbole dans la commande qui ne se termine pas correctement. Pour résoudre ce problème, nous pouvons vérifier que les symboles de la commande sont correctement appariés et nous assurer que chaque symbole a le bon terminateur. Vous pouvez également essayer d'utiliser des caractères d'échappement pour gérer les commandes contenant des symboles spéciaux. J'espère que ces méthodes pourront aider les développeurs qui rencontrent le même problème !
se trouve dans la structure de répertoires suivante,
. ├── foo.go ├── go.mod └── main.go
J'ai un foo.go
qui a une définition de type simple :
package main type foo struct { baz string }
Si je lance ngofmt -r
depuis la ligne de commande pour remplacer le nom de la variable, cela fonctionne :
> gofmt -r 'foo -> bar' foo.go package main type bar struct { baz string }
Mais si j'essaie d'utiliser ce programme pour faire cela à partir de main.go
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)) }
J'obtiens l'erreur :
> 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
Savez-vous ce qui a causé cela ?
Vous n'avez pas besoin de citer exec.command
的参数;引用是 shell 的一项功能,在进行系统调用时不适用。也没有必要,因为在 shell 中引用是为了描述参数,但在 exec.command
où les arguments sont séparés en arguments pour l'appel de fonction.
Spécifique :
exec.command("gofmt", "-r", "'foo -> bar'", "foo.go")
devrait être
exec.Command("gofmt", "-r", "Foo -> Bar", "foo.go")
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!