Dalam Python, anda boleh menggunakan string.format untuk memasukkan nilai ke dalam rentetan dengan ruang letak seperti ini:
"File {file} had error {error}".format(file=myfile, error=err)
Go mempunyai fungsi setara yang dipanggil Sprintf, yang berfungsi dengan cara yang serupa:
fmt.Sprintf("File %s had error %s", myfile, err)
Walau bagaimanapun, Sprintf mempunyai had: ia memerlukan susunan parameter dalam rentetan format untuk memadankan susunan argumen. Ini boleh menjadi masalah untuk pengantarabangsaan (I18N), di mana susunan pemegang tempat mungkin berbeza-beza bergantung pada bahasa.
Go menyediakan alternatif yang lebih fleksibel kepada Sprintf dipanggil teks/templat. Ia membolehkan lebih kawalan ke atas pemformatan, termasuk keupayaan untuk menentukan susunan pemegang tempat:
package main import ( "bytes" "text/template" "os" ) func main() { type Params struct { File string Error string } var msg bytes.Buffer params := &Params{ File: "abc", Error: "def", } tmpl, _ := template.New("errmsg").Parse("File {{.File}} has error {{.Error}}") tmpl.Execute(&msg, params) msg.WriteTo(os.Stdout) }
Pendekatan berasaskan templat ini membolehkan lebih fleksibiliti dan kawalan ke atas pemformatan rentetan.
Rentetan.Pengganti jenis boleh digunakan untuk melaksanakan pemformat yang membenarkan pemegang tempat dengan nama tersuai:
package main import ( "fmt" "strings" ) 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)) }
Pendekatan ini mudah dan mudah digunakan.
Pilihan lain ialah menggunakan indeks hujah eksplisit dalam rentetan format, membenarkan ruang letak untuk digunakan semula beberapa kali:
fmt.Printf("File %[1]s had error %[1]s", myfile, err)
Pendekatan ini kurang serba boleh berbanding yang sebelumnya tetapi boleh berguna untuk kes mudah.
Atas ialah kandungan terperinci Apakah persamaan Go dengan `string.format` Python dan bagaimana ia membandingkan dalam fleksibiliti dan kefungsian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!