Maison > développement back-end > Golang > Comment trier les champs Go Struct par ordre alphabétique lors de l'impression ?

Comment trier les champs Go Struct par ordre alphabétique lors de l'impression ?

Patricia Arquette
Libérer: 2024-11-23 05:27:28
original
1099 Les gens l'ont consulté

How to Sort Go Struct Fields Alphabetically When Printing?

Comment rendre les champs de structure par ordre alphabétique

Les structures dans Go possèdent des champs ordonnés. Cependant, l'impression d'une structure à l'aide du package de formatage (fmt) présente les champs dans un ordre non alphabétique. Cet article examine les techniques de tri des champs de structure par ordre alphabétique.

Prédéfinir les champs par ordre alphabétique

L'approche directe consiste à déclarer la structure avec des champs disposés en ordre alphabétique. Cette méthode est simple et garantit un ordre correct indépendamment de la réflexion ou du formatage personnalisé.

type T struct {
    A int
    B int
}
Copier après la connexion

Implémentez l'interface Stringer

En implémentant l'interface Stringer avec un String() méthode, vous pouvez personnaliser la façon dont la structure est affichée. Cette méthode vous permet de spécifier l'ordre des champs dans la sortie.

func (t T) String() string {
    return fmt.Sprintf("{%d %d}", t.A, t.B)
}
Copier après la connexion

Employer Reflection

Reflection offre une solution complète qui s'applique à n'importe quelle structure, quel que soit son type. ou la définition du package. Cela implique d'obtenir les noms de champs, de les trier, puis d'accéder aux valeurs des champs en fonction des noms triés.

func printFields(st interface{}) string {
    t := reflect.TypeOf(st)

    names := make([]string, t.NumField())
    for i := range names {
        names[i] = t.Field(i).Name
    }
    sort.Strings(names)

    v := reflect.ValueOf(st)
    buf := &bytes.Buffer{}
    buf.WriteString("{")
    for i, name := range names {
        val := v.FieldByName(name)
        if !val.CanInterface() {
            continue
        }
        if i > 0 {
            buf.WriteString(" ")
        }
        fmt.Fprintf(buf, "%v", val.Interface())
    }
    buf.WriteString("}")

    return buf.String()
}
Copier après la connexion

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!

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