Use reflection to dump context
- 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