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!