Maison > développement back-end > Golang > Récupère les noms des champs dans la structure

Récupère les noms des champs dans la structure

WBOY
Libérer: 2024-02-06 08:25:03
avant
1039 Les gens l'ont consulté

Récupère les noms des champs dans la structure

Contenu de la question

J'ai écrit un programme pour récupérer les noms de champs à l'intérieur d'une structure et cela fonctionne très bien. Cependant, cela ne fonctionne pas lorsqu'il s'agit du pointeur de structure à l'intérieur de la structure.

https://go.dev/play/p/pHrNRhfZSM4

Lors de l'inspection de la structure du pointeur de type, il affiche « Ptr » à l'aide du package de réflexion, mais lorsque j'exécute Elem(), il indique qu'il existe un moyen de résoudre ce problème ?

Je veux juste obtenir tous les noms de champs dans MAP marqués de "encr".


Bonne réponse


Utilisez des types au lieu de valeurs :

func getencfields(t reflect.type, list map[string]int) {
    // dereference pointer types.
    for t.kind() == reflect.ptr {
        t = t.elem()
    }
    // look for tags in struct fields.
    if t.kind() == reflect.struct {
        for i := 0; i < t.numfield(); i++ {
            field := t.field(i)
            tag := field.tag.get("bson")
            if containstag(tag, "encr") {
                list[getfieldname(field, tag)]++
            }
            getencfields(field.type, list)
        }
    }
}
Copier après la connexion

La méthode d'appel est la suivante :

listOfEncTags := make(map[string]int)
getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags)
fmt.Println(listOfEncTags)
Copier après la connexion

https://www.php.cn/link/761213bcd999998a5b22d22b13db075f

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal