"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo obtener direcciones de campo en estructuras anidadas mediante reflexión?

¿Cómo obtener direcciones de campo en estructuras anidadas mediante reflexión?

Publicado el 2024-11-10
Navegar:678

How to Obtain Field Addresses in Nested Structures Using Reflection?

Obtención de direcciones de campo en estructuras anidadas mediante reflexión

En este escenario, desea recorrer y examinar estructuras anidadas y obtener las direcciones de estructuras no anidadas. -campos de puntero dentro de ellos. Al utilizar la reflexión, tiene una función que itera a través de campos pero encuentra dificultades para obtener la dirección de memoria de campos que no son de puntero ubicados en subestructuras incrustadas.

Para rectificar este problema, es crucial tener en cuenta que valueField.Interface() no no proporciona el resultado esperado porque devuelve el valor real almacenado dentro del campo, lo cual no es válido cuando se trabaja con tipos que no son de puntero.

La solución radica en modificar la función InspectStructV para recibir un reflect.Value en lugar de una interfaz{}. Esto le permite manipular directamente el objeto de reflexión y recuperar la dirección del campo. Además, cuando se llama recursivamente a InspectStructV para campos de estructura, valueField, que anteriormente contenía el valor de la interfaz, ahora apunta directamente al valor de reflexión de la estructura anidada, lo que garantiza que la dirección se pueda recuperar correctamente.

Aquí está el código revisado fragmento:

func InspectStructV(val reflect.Value) {
    if val.Kind() == reflect.Interface && !val.IsNil() {
        elm := val.Elem()
        if elm.Kind() == reflect.Ptr && !elm.IsNil() && elm.Elem().Kind() == reflect.Ptr {
            val = elm
        }
    }
    if val.Kind() == reflect.Ptr {
        val = val.Elem()
    }

    for i := 0; i 

Al realizar estos cambios, podrá recuperar con éxito las direcciones de memoria de campos que no son de puntero incluso cuando residan dentro de estructuras anidadas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3