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".
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!