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

WBOY
Lepaskan: 2024-02-11 18:10:07
ke hadapan
649 orang telah melayarinya

尝试使用 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
Salin selepas log masuk

Saya mempunyai foo.go yang mempunyai definisi jenis mudah:

package main

type foo struct {
    baz string
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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))
}
Salin selepas log masuk

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
Salin selepas log masuk

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")
Salin selepas log masuk

sepatutnya

exec.Command("gofmt", "-r", "Foo -> Bar", "foo.go")
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!