Maison  >  Article  >  développement back-end  >  Comment accéder à une structure intégrée dans un champ de tranche de pointeur d'une structure

Comment accéder à une structure intégrée dans un champ de tranche de pointeur d'une structure

WBOY
WBOYavant
2024-02-09 08:27:51335parcourir

Comment accéder à une structure intégrée dans un champ de tranche de pointeur dune structure

L'éditeur de PHP vous présentera comment accéder à la structure embarquée dans le champ slice pointeur de la structure. En langage Go, nous pouvons utiliser des tranches de pointeur pour stocker des données de structure et intégrer d'autres structures en tant que champs dans la structure. Cependant, l'accès aux champs de la structure intégrée nécessite certaines opérations spéciales. Cet article expliquera en détail comment accéder à ces champs de structure intégrés via le découpage de pointeur pour vous aider à mieux comprendre et appliquer cette fonctionnalité. Que vous soyez débutant ou développeur Go expérimenté, cet article vous fournira des conseils pratiques et des exemples de code pour vous aider à maîtriser ces connaissances facilement.

Contenu de la question

Je souhaite ajouter une fonctionnalité pour obtenir le premier élément lorsque les données sont []*struct .

func getencfields(t reflect.type, list map[string]int) {
    for t.kind() == reflect.ptr {
        t = t.elem()
    }
    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)
        }
    }

Dans ce code, je dois ajouter des fonctionnalités lorsque les données sont []*struct . C'est le type de structure à passer dans cette fonction.

type Customer struct {
    Name     string    `json:"name" bson:"name"`
    Acnumber int64     `json:"acnumber" bson:"acnumber,encr"`
    Number   int64     `json:"number" bson:"number,encr"`
    Address  []*Address `json:"address" bson:"address"`
}
type Address struct {
    Mail string `json:"mail" bson:"mail,encr"`
}

Merci pour votre soutien

Solution de contournement

Explorez les tableaux, les tranches et les cartes, tout comme des pointeurs.

func getEncFields(t reflect.Type, list map[string]int) {
    for t.Kind() == reflect.Ptr || t.Kind() == reflect.Slice || t.Kind() == reflect.Array || t.Kind() == reflect.Map {
        t = t.Elem()
    }
    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)
        }
    }
}

https://www.php.cn/link/b4572f47b7c69e27b8e46646d9579e67 p>

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