在Python 中,可以使用string.format 將值插入字串帶有這樣的佔位符:
"File {file} had error {error}".format(file=myfile, error=err)
Go 有一個等效的函數,稱為Sprintf,其工作原理與way:
fmt.Sprintf("File %s had error %s", myfile, err)
但是,Sprintf有一個限制:它要求格式字串中參數的順序與參數的順序相符。這可能是國際化 (I18N) 的問題,其中佔位符的順序可能會因語言而異。
Go 提供Sprintf 的更靈活替代方案稱為文字/範本。它允許對格式進行更多控制,包括指定佔位符順序的能力:
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) }
這種基於模板的方法可以提供更大的靈活性和對字串格式的控制。
可以使用strings.Replacer 類型來實作允許使用自訂名稱的佔位符的格式化程式:
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)) }
這種方法簡單易用。
另一個選擇是在格式字串中使用明確參數索引,允許佔位符重複使用多個times:
fmt.Printf("File %[1]s had error %[1]s", myfile, err)
這種方法的通用性不如以前的方法,但對於簡單的情況很有用。
以上是Go 中 Python 的「string.format」等價物是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!