Maison >développement back-end >Golang >Comment imprimer la valeur du pointeur imbriqué d'une structure dans Golang sans l'adresse du pointeur ?

Comment imprimer la valeur du pointeur imbriqué d'une structure dans Golang sans l'adresse du pointeur ?

DDD
DDDoriginal
2024-12-07 17:04:11311parcourir

How to Print a Struct's Nested Pointer Value in Golang Without the Pointer Address?

Comment imprimer la valeur de structure avec un pointeur dans Golang

Considérez l'extrait de code suivant :

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) // output: v ==== &{a:1 B:0xc42000e204}
}

Ici, vous souhaitez imprimer la valeur de B sans sa représentation de pointeur. Pour y parvenir, il existe quelques options :

1. Implémentation de l'interface Stringer :

La fonction fmt.Printf() appelle la méthode String() si elle existe pour le type en cours d'impression. Implémentez la méthode String() pour les structures A et B :

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

Avec cette implémentation, le résultat sera :

v ==== A{a:1, B:B{b:2}}

2. Personnalisation du format d'impression :

Vous pouvez directement formater la chaîne de sortie pour inclure uniquement les champs souhaités :

fmt.Printf("v ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)

Sortie :

v ==== A{a:1, B:B{b:2}}

3. Référencement des valeurs dans la structure :

Puisque B est un champ dans A, vous pouvez directement référencer sa valeur :

fmt.Printf("v ==== A{a:%d, B:%v}", a.a, a.B)

Sortie :

v ==== A{a:1, B:&{b:2}}

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:
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