Maison > développement back-end > Golang > 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
Libérer: 2024-02-09 08:27:51
avant
375 Les gens l'ont consulté

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)
        }
    }
Copier après la connexion

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"`
}
Copier après la connexion

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)
        }
    }
}
Copier après la connexion

//m.sbmmt.com/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!

Étiquettes associées:
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