"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 > ¿Se puede recuperar un `reflect.Type` en Go sin crear una instancia del tipo o usar su nombre como cadena?

¿Se puede recuperar un `reflect.Type` en Go sin crear una instancia del tipo o usar su nombre como cadena?

Publicado el 2024-11-10
Navegar:955

Can You Retrieve a `reflect.Type` in Go Without Instantiating the Type or Using its Name as a String?

Recuperar Reflect.Type de un tipo o su nombre en Go

Esta pregunta explora si es posible obtener el reflect.Type de un tipo personalizado, como "t1" en el ejemplo dado, sin crear una instancia del mismo ni usar su nombre como una cadena.

Con respecto a la primera parte de la pregunta, sí, es factible lograr esto usando un tipo nulo. El siguiente fragmento de código demuestra este enfoque:

var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()

En este ejemplo, aprovechamos un tipo puntero nulo para obtener el tipo de tiempo de ejecución de "t1".

En cuanto a la segunda parte, recuperar el reflect.Type directamente desde el nombre de un tipo no es compatible con Go. El tiempo de ejecución no mantiene un mapa de todos los tipos en el binario actual, lo cual sería necesario para lograr esto.

Si bien es posible crear un paquete de registro de tipos y registrar tipos para su búsqueda por cadena, esto inevitablemente estar incompleto. Además, los tipos anónimos presentan complicaciones ya que sus nombres pueden no ser únicos.

Si bien Go, en teoría, podría ofrecer una función para recuperar un tipo según su nombre, es poco probable que esta característica se implemente en un futuro cercano.

Ú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