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
Susan Sarandonoriginal
2024-11-24 19:51:10366parcourir

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
}

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)
}

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()
}

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!

Déclaration:
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