a8m / a8m/reflect-examples

Use reflection to dump context

Ouverte Adaptée aux débutants
#6 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Aucune donnée de langage
Étoiles
568
Forks
73
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Sometimes for local debugging, using [reflection to dump the context](https://stackoverflow.com/a/60278058/2904179) is handy:
```
func printContextInternals(ctx interface{}, inner bool) {
contextValues := reflect.ValueOf(ctx).Elem()
contextKeys := reflect.TypeOf(ctx).Elem()

if !inner {
fmt.Printf("\nFields for %s.%s\n", contextKeys.PkgPath(), contextKeys.Name())
}

if contextKeys.Kind() == reflect.Struct {
for i := 0; i < contextValues.NumField(); i++ {
reflectValue := contextValues.Field(i)
reflectValue = reflect.NewAt(reflectValue.Type(), unsafe.Pointer(reflectValue.UnsafeAddr())).Elem()

reflectField := contextKeys.Field(i)

if reflectField.Name == "Context" {
printContextInternals(reflectValue.Interface(), true)
} else {
fmt.Printf("field name: %+v\n", reflectField.Name)
fmt.Printf("value: %+v\n", reflectValue.Interface())
}
}
} else {
fmt.Printf("context is empty (int)\n")
}
}
```

Thanks for putting all your examples in one central place!

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

L’issue suggère d’ajouter un utilitaire de débogage basé sur la réflexion pour les contextes Go. Consultez les exemples existants dans le dépôt afin de comprendre la structure et les conventions de nommage. La fonction fournie peut être adaptée dans un nouveau fichier d’exemple, probablement dans un répertoire tel que 'context' ou 'debug'. Assurez-vous que l’exemple se compile et s’exécute, en montrant comment inspecter les éléments internes d’un contexte. Vérifiez s’il existe déjà des tests afin de voir comment les exemples sont validés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
go
Domaine
documentation
Type d'issue
Documentation
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
75/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.