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!
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?
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!