Maison > développement back-end > Golang > Quels sont les équivalents Go du « string.format » de Python et comment se comparent-ils en termes de flexibilité et de fonctionnalités ?

Quels sont les équivalents Go du « string.format » de Python et comment se comparent-ils en termes de flexibilité et de fonctionnalités ?

Susan Sarandon
Libérer: 2024-12-29 17:56:20
original
871 Les gens l'ont consulté

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

Équivalent de Python string.format dans Go?

En Python, vous pouvez utiliser string.format pour insérer des valeurs dans des chaînes avec des espaces réservés comme celui-ci :

"File {file} had error {error}".format(file=myfile, error=err)
Copier après la connexion

Go a une fonction équivalente appelée Sprintf, qui fonctionne de manière similaire way:

fmt.Sprintf("File %s had error %s", myfile, err)
Copier après la connexion

Cependant, Sprintf a une limitation : il nécessite que l'ordre des paramètres dans la chaîne de format corresponde à l'ordre des arguments. Cela peut poser un problème pour l'internationalisation (I18N), où l'ordre des espaces réservés peut varier en fonction de la langue.

Utilisation de text/template

Go fournit une alternative plus flexible à Sprintf appelée texte/modèle. Il permet plus de contrôle sur le formatage, y compris la possibilité de spécifier l'ordre des espaces réservés :

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)
}
Copier après la connexion

Cette approche basée sur un modèle permet une plus grande flexibilité et un plus grand contrôle sur le formatage de la chaîne.

Avec strings.Replacer

Le type strings.Replacer peut être utilisé pour implémenter un formateur qui permet des espaces réservés avec des noms personnalisés :

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))
}
Copier après la connexion

Cette approche est simple et simple à utiliser.

Utilisation d'indices d'arguments explicites

Une autre option consiste à utiliser des indices d'argument explicites dans la chaîne de format, permettant aux espaces réservés d'être réutilisés plusieurs fois. fois :

fmt.Printf("File %[1]s had error %[1]s", myfile, err)
Copier après la connexion

Cette approche est moins polyvalente que les précédentes mais peut être utile pour des cas simples.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal