Maison  >  Article  >  développement back-end  >  Erreur "Le texte de la rune n'est pas terminé" lors de la tentative d'exécution de gofmt -r à l'aide de exec.Command

Erreur "Le texte de la rune n'est pas terminé" lors de la tentative d'exécution de gofmt -r à l'aide de exec.Command

WBOY
WBOYavant
2024-02-11 18:10:07663parcourir

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

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 !

Le contenu de la question

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 ?

Solution de contournement

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer