In Python bietet die String-Interpolation mit der format()-Methode Flexibilität beim Sortieren und Ersetzen von Parametern. In Go bietet die Funktion fmt.Sprintf() jedoch eine eingeschränktere Option, was die Internationalisierung behindert (I18N). Gibt es eine geeignetere Alternative, die eine unabhängige Parameterreihenfolge ermöglicht?
Strings.Replacer
Mit strings.Replacer können Sie Ihren benutzerdefinierten String-Formatierer effektiv erstellen.
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)) }
Beispielausgabe:
File /data/test.txt had error file not found
WiText/Vorlage
Die Das Paket text/template bietet eine vorlagenbasierte Lösung, die jedoch ausführlicher sein kann als der Strings.Replacer-Ansatz.
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) }
Beispielausgabe:
File /data/test.txt has error 666
Explizite Argumentindizes
fmt.Sprintf() unterstützt explizite Argumentindizes, sodass Sie denselben Index mehrmals wiederholen können, um denselben Parameter zu ersetzen. Erfahren Sie mehr über diese Technik in der zugehörigen Frage „Ersetzen Sie alle Variablen in Sprintf durch dieselbe Variable.“
Das obige ist der detaillierte Inhalt vonGo-String-Formatierung: Jenseits von „fmt.Sprintf()' – Welche Alternativen gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!