Maison >développement back-end >Golang >Comment personnaliser la sortie d'impression de Go pour les structures avec des pointeurs ?

Comment personnaliser la sortie d'impression de Go pour les structures avec des pointeurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-12 16:02:12934parcourir

How to Customize Go's Print Output for Structs with Pointers?

Personnalisation de la sortie d'impression des structures avec des pointeurs

Lors de l'impression de structures avec des pointeurs dans Go, l'utilisation du spécificateur de format %v par défaut peut ne pas fournir le résultat souhaité. En effet, il imprime l'adresse du pointeur au lieu du contenu de la structure référencée.

Pour résoudre ce problème, il existe deux approches principales : définir une méthode String personnalisée pour le type de structure ou formater manuellement la sortie.

Définition d'une méthode de chaîne personnalisée

La méthode préférée consiste à implémenter l'interface Stringer pour les types de structure impliqués. Cela peut être fait en ajoutant une méthode de chaîne String() à la structure. La chaîne de format passée à la fonction printf appellera cette méthode à la place.

Par exemple :

package main

import "fmt"

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

func main() {
    a := &A{a: 1, B: &B{b: 2}}
    fmt.Printf("v ==== %v \n", a) // Prints "v ==== A{a:1, B:B{b:2}}"
}

Formatage manuel

En l'absence de une méthode String, vous pouvez formater la sortie manuellement à l'aide des spécificateurs de format des membres individuels de la structure.

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 ==== A{a:%d, B:B{b:%d}}\n", a.a, a.B.b)
}

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