Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat "Teks Rune tidak ditamatkan" semasa cuba menjalankan gofmt -r menggunakan exec.Command

Ralat "Teks Rune tidak ditamatkan" semasa cuba menjalankan gofmt -r menggunakan exec.Command

WBOY
WBOYke hadapan
2024-02-11 18:10:07663semak imbas

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

editor php Yuzi mengalami ralat "teks rune tidak ditamatkan" semasa menjalankan gofmt -r menggunakan exec.Command. Ralat ini mungkin disebabkan oleh simbol dalam arahan tidak tamat dengan betul. Untuk menyelesaikan masalah ini, kita boleh menyemak sama ada simbol dalam arahan dipasangkan dengan betul dan pastikan setiap simbol mempunyai penamat yang betul. Juga, cuba gunakan aksara melarikan diri untuk mengendalikan arahan yang mengandungi simbol khas. Saya harap kaedah ini dapat membantu pembangun yang menghadapi masalah yang sama!

Kandungan soalan

berada dalam struktur direktori berikut,

.
├── foo.go
├── go.mod
└── main.go

Saya mempunyai foo.go yang mempunyai definisi jenis mudah:

package main

type foo struct {
    baz string
}

Jika saya menjalankan ngofmt -r dari baris arahan untuk menggantikan nama pembolehubah, ia berfungsi:

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

type bar struct {
    baz string
}

Tetapi jika saya cuba menggunakan program ini untuk melakukan ini dari 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))
}

Saya mendapat ralat:

> 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

Tahukah anda apa puncanya?

Penyelesaian

Anda tidak perlu memetik exec.command 的参数;引用是 shell 的一项功能,在进行系统调用时不适用。也没有必要,因为在 shell 中引用是为了描述参数,但在 exec.command di mana hujah dipisahkan menjadi argumen untuk panggilan fungsi.

Spesifik:

exec.command("gofmt", "-r", "'foo -> bar'", "foo.go")

sepatutnya

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

Atas ialah kandungan terperinci Ralat "Teks Rune tidak ditamatkan" semasa cuba menjalankan gofmt -r menggunakan exec.Command. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam