type reflect golang example go reflection types go-reflect

reflect - En golang, ¿es posible reflejarse. Escriba desde el tipo mismo, desde el nombre como cadena?



golang reflect type (1)

El 1, sí, un poco:

var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem() fmt.Println(v1) // prints "main.t1"

No se necesita instanciación. Sin embargo, Go no tiene literales de tipo, que creo que es lo que estás pidiendo. Para obtener el valor de tiempo de ejecución de un tipo, debe tener un valor de algún tipo. Si no desea o no puede crear el valor en tiempo de ejecución, puede extraerlo de un cero escrito. Si no le gusta la idea de buscar esto cada vez, puede almacenar este tipo de tiempo de ejecución en una variable.

En 2, no, en realidad no. Esto requeriría que el tiempo de ejecución de Go mantenga un mapa de todos los tipos en el binario actual, que tiene una serie de problemas. Puede crear un paquete de registro de tipo y registrar todos los tipos que desee recuperar por cadena, pero eso siempre estará incompleto, y si sabe qué tipo desea, siempre puede usar TypeOf. La situación se vuelve un poco más complicada por el hecho de que puede tener tipos anónimos, y el nombre como "t1" no es seguro que sea único, ya que otro paquete puede tener un tipo del mismo nombre. Es posible que el tiempo de ejecución de Go proporcione una función que proporcione un tipo de un nombre de cadena, pero dudo que eso suceda.

type t1 struct { i int; s string } var v1 reflect.Type = /* how to set to t1''s reflect.Type? */

  1. ¿es posible obtener el reflejo.Tipo de t1 sin tener que instanciarlo?

  2. ¿Es posible obtener el reflejo. ¿El tipo de t1 debe tener su nombre "t1" como una cadena?