Heim > Backend-Entwicklung > Golang > Was sind die Go-Äquivalente zu Pythons „string.format' und wie unterscheiden sie sich in Flexibilität und Funktionalität?

Was sind die Go-Äquivalente zu Pythons „string.format' und wie unterscheiden sie sich in Flexibilität und Funktionalität?

Susan Sarandon
Freigeben: 2024-12-29 17:56:20
Original
871 Leute haben es durchsucht

What are the Go equivalents to Python's `string.format` and how do they compare in flexibility and functionality?

Äquivalent zu Python string.format in Go?

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)
Nach dem Login kopieren

Go hat eine äquivalente Funktion namens Sprintf, die auf ähnliche Weise funktioniert Weg:

fmt.Sprintf("File %s had error %s", myfile, err)
Nach dem Login kopieren

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.

Text/Vorlage verwenden

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)
}
Nach dem Login kopieren

Dieser vorlagenbasierte Ansatz ermöglicht eine größere Flexibilität und Kontrolle über die Formatierung der Zeichenfolge.

Mit strings.Replacer

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))
}
Nach dem Login kopieren

Dieser Ansatz ist unkompliziert und einfach zu verwenden.

Verwendung expliziter Argumentindizes

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage