Maison > développement back-end > Golang > Comment imprimer des valeurs de structure imbriquées dans Golang sans adresses mémoire ?

Comment imprimer des valeurs de structure imbriquées dans Golang sans adresses mémoire ?

Patricia Arquette
Libérer: 2024-11-28 06:16:14
original
194 Les gens l'ont consulté

How to Print Nested Struct Values in Golang Without Memory Addresses?

Comment imprimer des valeurs de structure imbriquées sans pointeurs dans Golang

Lorsque vous travaillez avec des structures imbriquées, il peut être difficile d'imprimer leurs valeurs sans afficher leurs adresses mémoire. Regardons cet exemple :

package main

import "fmt"

type A struct {
    a int32
    B *B
}

type B struct {
    b int32
}

func main() {
    a := &A{
        a: 1,
        B: &B{
            b: 2,
        },
    }
    fmt.Printf("v ==== %+v \n", a)
}
Copier après la connexion

Lors de l'exécution de ce code, vous verrez que la sortie contient l'adresse mémoire de la structure imbriquée B :

v ==== &{a:1 B:0xc42000e204}
Copier après la connexion

Pour récupérer la valeur réelle de B, vous pouvez adopter l'une de ces approches :

Implémenter l'interface Stringer

Implémenter l'interface Stringer L'interface pour la structure imbriquée vous permet de définir comment sa représentation sous forme de chaîne sera formatée lors de l'impression. Voici comment procéder :

type A struct {
    a int32
    B *B
}

type B struct{ b int32 }

func (aa *A) String() string {
    return fmt.Sprintf("A{a:%d, B:%v}", aa.a, aa.B)
}

func (bb *B) String() string {
    return fmt.Sprintf("B{b:%d}", bb.b)
}
Copier après la connexion

Avec cette implémentation, vous pouvez désormais utiliser le spécificateur de format %v pour imprimer une représentation sous forme de chaîne personnalisée de la structure :

fmt.Printf("v ==== %v \n", a)
// Output: v ==== A{a:1, B:B{b:2}}
Copier après la connexion

Impression des valeurs Manuellement

Vous pouvez également imprimer manuellement les valeurs sans recourir à l'interface Stringer. Cette approche vous donne plus de contrôle sur le format de sortie :

fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
// Output: v ==== A{a:1, B:B{b:2}}
Copier après la connexion

Référencement des valeurs de structure

Si vous souhaitez éviter d'imprimer la référence de structure, vous pouvez référencer explicitement ses valeurs :

fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)
// Output: v ==== A{a:1, B:&{b:2}}
Copier après la connexion

Cependant, cette approche peut devenir complexe lorsqu'il s'agit de structures profondément imbriquées.

En résumé, vous pouvez imprimer valeurs de structure imbriquées sans pointeurs en implémentant l'interface Stringer, en imprimant les valeurs manuellement ou en référençant directement les valeurs de structure. Choisissez l'approche qui correspond le mieux à vos besoins spécifiques.

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