a8m / a8m/reflect-examples

Use reflection to dump context

Abierto Apto para principiantes
#6 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Sin datos de lenguaje
Estrellas
568
Forks
73
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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!

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

El issue sugiere añadir una utilidad de depuración basada en reflection para contextos de Go. Consulte los ejemplos existentes en el repositorio para entender la estructura y los nombres. La función proporcionada puede adaptarse a un nuevo archivo de ejemplo, probablemente en un directorio como 'context' o 'debug'. Asegúrese de que el ejemplo compile y se ejecute, demostrando cómo inspeccionar los componentes internos de un contexto. Compruebe si ya existen tests para ver cómo se validan los ejemplos.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
go
Área
documentation
Tipo de issue
Documentación
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
75/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.