Heim >Backend-Entwicklung >Golang >Go-String-Formatierung: Jenseits von „fmt.Sprintf()' – Welche Alternativen gibt es?

Go-String-Formatierung: Jenseits von „fmt.Sprintf()' – Welche Alternativen gibt es?

Susan Sarandon
Susan SarandonOriginal
2024-12-20 02:47:09617Durchsuche

Go String Formatting:  Beyond `fmt.Sprintf()` – What are the Alternatives?

Äquivalent zu Python string.format in Go?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn