Подтвердить что ты не робот

В golang, возможно ли получить отражение. Тип из самого типа, от имени как строки?

type t1 struct { i int; s string }
var v1 reflect.Type = /* how to set to t1 reflect.Type? */
  • Можно ли получить отражение. Тип t1 без необходимости его экземпляра?

  • Можно ли получить отражение. Тип t1 от имени его "t1" в виде строки?

4b9b3361

Ответ 1

В 1, да, вид:

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

Нет необходимости в создании экземпляра. Однако у Go нет литералов типа, и я думаю, что вы просите. Чтобы получить значение времени выполнения для типа, вы должны иметь какое-то значение. Если вы не хотите или не можете создать значение во время выполнения, вы можете вытащить его из типизированного нуля. Если вам не нравится идея каждый раз просматривать это, вы можете сохранить этот тип выполнения в переменной.

На 2 нет, не совсем. Это потребует времени выполнения Go для сохранения карты всех типов в текущем двоичном файле, которая имеет ряд проблем. Вы можете создать пакет реестра типа и зарегистрировать все типы, которые вы, возможно, захотите извлечь по строкам, но это всегда будет неполным, и если вы знаете, какой тип вы хотите, вы всегда можете просто использовать TypeOf. Ситуация немного усложняется тем фактом, что вы можете иметь анонимные типы, а имя типа "t1" не обязательно уникально, поскольку другой пакет может иметь тип с тем же именем. Во время выполнения Go может быть предоставлена ​​функция, которая дает тип из имени строки, но я сомневаюсь, что это произойдет.