In Python können Sie string.format verwenden, um Werte in Strings einzufügen mit Platzhaltern wie diesem:
"File {file} had error {error}".format(file=myfile, error=err)
Go hat eine äquivalente Funktion namens Sprintf, die auf ähnliche Weise funktioniert Weg:
fmt.Sprintf("File %s had error %s", myfile, err)
Sprintf hat jedoch eine Einschränkung: Es erfordert, dass die Reihenfolge der Parameter in der Formatzeichenfolge mit der Reihenfolge der Argumente übereinstimmt. Dies kann ein Problem bei der Internationalisierung (I18N) sein, bei der die Reihenfolge der Platzhalter je nach Sprache variieren kann.
Go bietet eine flexiblere Alternative zu Sprintf namens text/template. Es ermöglicht mehr Kontrolle über die Formatierung, einschließlich der Möglichkeit, die Reihenfolge der Platzhalter festzulegen:
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) }
Dieser vorlagenbasierte Ansatz ermöglicht eine größere Flexibilität und Kontrolle über die Formatierung der Zeichenfolge.
Der Typ strings.Replacer kann zur Implementierung verwendet werden ein Formatierer, der Platzhalter mit benutzerdefinierten Namen zulässt:
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)) }
Dieser Ansatz ist unkompliziert und einfach zu verwenden.
Eine weitere Option besteht darin, explizite Argumentindizes in der Formatzeichenfolge zu verwenden, sodass Platzhalter mehrfach wiederverwendet werden können Zeiten:
fmt.Printf("File %[1]s had error %[1]s", myfile, err)
Dieser Ansatz ist weniger vielseitig als die vorherigen, kann aber für einfache Fälle nützlich sein.
Das obige ist der detaillierte Inhalt vonWas sind die Go-Äquivalente zu Pythons „string.format' und wie unterscheiden sie sich in Flexibilität und Funktionalität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!