Maison > développement back-end > Golang > Comment imprimer les champs Go Struct par ordre alphabétique ?

Comment imprimer les champs Go Struct par ordre alphabétique ?

Susan Sarandon
Libérer: 2024-11-24 19:51:10
original
348 Les gens l'ont consulté

How to Print Go Struct Fields in Alphabetical Order?

Comment imprimer les champs de structure par ordre alphabétique

Dans Go, les champs d'une structure sont classés au fur et à mesure de leur définition. Par conséquent, si vous souhaitez obtenir une sortie d'une structure triée par noms de champs, la solution la plus simple est de trier les champs par ordre alphabétique dans la déclaration du type de structure.

Par exemple :

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

Cependant, si vous ne pouvez pas modifier l'ordre des champs en raison de considérations de disposition de la mémoire, vous disposez d'autres options :

1. Implémentez l'interface Stringer

En implémentant la méthode String(), vous pouvez contrôler la sortie de votre structure :

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

2. Utiliser Reflection

Reflection fournit un moyen flexible de parcourir les champs de structure et d'obtenir leurs valeurs :

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

En appelant la fonction printFields(), vous pouvez obtenir la sortie triée de votre structure.

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