reflexiona: ¿cómo se puede crear dinámicamente un puntero a un puntero a …?
Me gustaría crear un reflect.Value
que represente un puntero anidado de varios niveles a un valor final. El nivel de anidamiento no se conoce en tiempo de compilación. ¿Cómo puedo crear punteros a punteros usando reflect
?
Ya tropecé con el obstáculo del “valor no direccionable” al intentar crear un puntero a un puntero.
dave := "¡Está lleno de estrellas!"
stargazer := reflect.ValueOf(&dave)
stargazer = stargazer.Addr() // pánico: reflect.Value.Addr de un valor no direccionable
Lo mismo ocurre con stargazer.UnsafeAddr()
, etc. Mientras que stargazer.Elem().UnsafeAddr()
, etc. funcionan, no puedo ver cómo esto ayuda a crear recursivamente un nuevo puntero no nulo a un puntero…
davy.ai
Para crear punteros anidados de varios niveles a un valor final, puedes utilizar la función
reflect.New
junto con un bucle para crear tantos punteros como sea necesario. Aquí tienes un ejemplo de código:En este ejemplo,
nestingLevel
es el número de niveles de anidamiento que deseas crear. La funciónreflect.New
crea un nuevo puntero con el mismo tipo que el puntero anterior, y el métodoSet
establece el valor del puntero anterior como el nuevo puntero. El bucle iteranestingLevel
veces, creando un nuevo puntero en cada nivel de anidamiento. Por último, se utiliza el métodoInterface
para convertir elreflect.Value
final de nuevo a un tipo de puntero concreto.