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
Libérer: 2024-12-12 16:02:12
original
853 Les gens l'ont consulté

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

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

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