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

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

WBOY
WBOYavant
2024-02-06 08:25:03900parcourir

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

La méthode d'appel est la suivante :

listOfEncTags := make(map[string]int)
getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags)
fmt.Println(listOfEncTags)

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer