type - golang tag form



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

На 1, да, любопытное:

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

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

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

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

  2. возможно ли получить отражение. Тип t1 от имени его «t1» в виде строки?





go-reflect