Maison > développement back-end > Golang > 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
Libérer: 2024-02-11 18:10:07
avant
780 Les gens l'ont consulté

尝试使用 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
Copier après la connexion

J'ai un foo.go qui a une définition de type simple :

package main

type foo struct {
    baz string
}
Copier après la connexion

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
}
Copier après la connexion

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))
}
Copier après la connexion

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
Copier après la connexion

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")
Copier après la connexion

devrait être

exec.Command("gofmt", "-r", "Foo -> Bar", "foo.go")
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal