Comment puis - je imprimer (dans la console) le Id
, Title
, Name
, etc. de cette struct dans golang?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
fmt.Println
.Réponses:
Pour imprimer le nom des champs dans une structure:
De l'
fmt
emballage :Cela suppose que vous ayez une instance de Project (dans '
yourProject
')L'article JSON et Go donnera plus de détails sur la façon de récupérer les valeurs d'une structure JSON.
Cette page d'exemple Go fournit une autre technique:
Cela imprimerait:
Si vous n'avez aucune instance, vous devez utiliser la réflexion pour afficher le nom du champ d'une structure donnée, comme dans cet exemple .
la source
Je veux recommander go-spew , qui selon leur github "implémente une jolie imprimante profonde pour les structures de données Go pour aider au débogage"
exemple d'utilisation:
production:
la source
mes 2 cents seraient à utiliser
json.MarshalIndent
- surpris, ce n'est pas suggéré, car c'est le plus simple. par exemple:pas de dépôts externes et donne une sortie bien formatée.
la source
"\t"
par" "
si vous voulez mettre en retrait l'espace à la placeMarshal()
ne sérialise que les champs exportés d'une structure - c'est parfait pour les cartes.Je pense qu'il serait préférable d'implémenter un limon personnalisé si vous voulez une sorte de sortie formatée d'un
struct
par exemple
la source
la source
fmt.Printf(%#v, p)
, me lancemain.struct
avecstruct type
quelle est la différence entre"%#v"
et"%+v"
@cokebolAlternativement, essayez d'utiliser cette fonction
PrettyPrint()
Pour l'utiliser, vous n'avez pas besoin de packages supplémentaires à l'exception de
fmt
etencoding/json
, juste une référence, un pointeur vers ou un littéral de la structure que vous avez créée.Pour utiliser, prenez simplement votre structure, initialisez-la dans le paquet principal ou dans le paquet dans lequel vous vous trouvez et passez-la
PrettyPrint()
.Sa sortie serait
Jouez avec le code ici .
la source
J'aime la litière .
De leur readme:
Sdump
est assez pratique dans les tests:la source
Je recommande d'utiliser Pretty Printer Library . En cela, vous pouvez imprimer n'importe quelle structure très facilement.
Installer la bibliothèque
https://github.com/kr/pretty
ou
Maintenant, fais comme ça dans ton code
Vous pouvez également obtenir la différence entre les composants via cette bibliothèque et bien plus encore. Vous pouvez également consulter les documents de la bibliothèque ici.
la source
pretty.Formatter
Lorsque vous avez des structures plus complexes, vous devrez peut-être convertir en JSON avant d'imprimer:
Source: https://gist.github.com/tetsuok/4942960
la source
Visitez ici pour voir le code complet. Ici, vous trouverez également un lien vers un terminal en ligne où le code complet peut être exécuté et le programme représente comment extraire les informations de la structure (nom du champ leur type et valeur). Ci-dessous, l'extrait de programme qui imprime uniquement les noms de champ.
la source
Il y a aussi go-render , qui gère la récursivité du pointeur et beaucoup de tri de clé pour les cartes de chaîne et int.
Installation:
Exemple:
Qui imprime:
la source
Il s'agit de la méthode de base pour imprimer les détails
la source
Une autre façon est de créer un func appelé
toString
qui prend struct, formatez les champs comme vous le souhaitez.la source
Stringer
interface. Cela ressemblerait à ceci:func (t T) String() string { return fmt.Sprintf("SomeT{TID: %d, TField: %d, SomeTField: %s, SomeAnotherField: %s}", t.ID, t.Field, t.SomeTField, t.SomeAnotherField) }
Sans utiliser de bibliothèques externes et avec une nouvelle ligne après chaque champ:
la source
la source
très simple, je n'ai pas la structure des données et des validations J'ai donc changé la
Pour apprendre, vous pouvez obtenir de l'aide à partir d'ici: https://gobyexample.com/structs
la source
Peut-être que cela ne devrait pas être appliqué pour les demandes de production, mais si vous êtes en mode débogage, je vous suggère de suivre l'approche ci-dessous.
Il en résulte un formatage des données au format json avec une lisibilité accrue.
la source
La plupart de ces packages s'appuient sur le package Reflect pour rendre ces choses possibles.
fmt.Sprintf () utilise -> func (p * pp) printArg (interface arg {}, verbe rune) de la lib standard
Allez à la ligne 638 -> https://golang.org/src/fmt/print.go
Réflexion:
https://golang.org/pkg/reflect/
Exemple de code:
https://github.com/donutloop/toolkit/blob/master/debugutil/prettysprint.go
la source
Une meilleure façon de procéder serait de créer une constante globale pour la chaîne "% + v" dans un package appelé "commons" (peut-être) et de l'utiliser partout dans votre code
la source
Println
fonction n'accepte pas un argument de chaîne de format. Vous dites qu'une constante globale est meilleure mais n'avez pas justifié pourquoi elle est meilleure que la réponse marquée. Vous avez créé une étiquette non standard pour une chaîne de format bien connue. L'étiquette est beaucoup plus longue, plus difficile à retenir et personne d'autre qui travaille sur votre code ne l'utilisera. Il utilise à la fois ALL_CAPS et un trait de soulignement dont tout linter golang se plaindra. La convention estmixedCaps
golang.org/doc/effective_go.html#mixed-caps Il vaut probablement mieux supprimer cette réponse.