Rumah >pembangunan bahagian belakang >Golang >Go String Formatting: Beyond `fmt.Sprintf()` – Apakah Alternatifnya?

Go String Formatting: Beyond `fmt.Sprintf()` – Apakah Alternatifnya?

Susan Sarandon
Susan Sarandonasal
2024-12-20 02:47:09642semak imbas

Go String Formatting:  Beyond `fmt.Sprintf()` – What are the Alternatives?

Setara dengan Python string.format dalam Go?

Dalam Python, interpolasi rentetan menggunakan kaedah format() menawarkan fleksibiliti dalam menyusun dan menggantikan parameter. Walau bagaimanapun, dalam Go, fungsi fmt.Sprintf() menyediakan pilihan yang lebih terhad, menghalang pengantarabangsaan (I18N). Adakah terdapat alternatif yang lebih sesuai yang membolehkan pesanan parameter bebas?

Strings.Replacer

Menggunakan rentetan.Replacer membolehkan anda mencipta pemformat rentetan tersuai anda dengan berkesan.

func main() {
    file, err := "/data/test.txt", "file not found"

    log("File {file} had error {error}", "{file}", file, "{error}", err)
}

func log(format string, args ...string) {
    r := strings.NewReplacer(args...)
    fmt.Println(r.Replace(format))
}

Sampel Output:

File /data/test.txt had error file not found

WiText/Template

Pakej teks/templat menawarkan penyelesaian berasaskan templat, walaupun ia boleh menjadi lebih terperinci daripada pendekatan Strings.Replacer.

type P map[string]interface{}

func main() {
    file, err := "/data/test.txt", 666

    log4("File {{.file}} has error {{.error}}", P{"file": file, "error": err})
}

func log4(format string, p P) {
    t := template.Must(template.New("").Parse(format))
    t.Execute(os.Stdout, p)
}

Contoh Output:

File /data/test.txt has error 666

Hujah Eksplisit Indeks

fmt.Sprintf() menyokong indeks hujah eksplisit, membolehkan anda mengulangi indeks yang sama beberapa kali untuk menggantikan parameter yang sama. Ketahui lebih lanjut tentang teknik ini dalam soalan berkaitan "Gantikan semua pembolehubah dalam Sprintf dengan pembolehubah yang sama."

Atas ialah kandungan terperinci Go String Formatting: Beyond `fmt.Sprintf()` – Apakah Alternatifnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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