1, да, вроде:
var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()
fmt.Println(v1) // prints "main.t1"
Инстанцирование не требуется.Однако в Go нет литералов типа, что, я думаю, вы и просите.Чтобы получить значение типа во время выполнения, вам нужно иметь какое-то значение.Если вы не хотите или не можете создать значение во время выполнения, вы можете извлечь его из напечатанного nil.Если вам не нравится идея искать это каждый раз, вы можете сохранить этот тип времени выполнения в переменной.
На 2, нет, не совсем.Это потребовало бы, чтобы среда выполнения Go поддерживала карту всех типов в текущем двоичном файле, что имеет ряд проблем.Вы можете создать пакет реестра типов и зарегистрировать все типы, которые вы можете захотеть получить по строке, но это всегда будет неполным, и если вы знаете, какой тип вам нужен, вы всегда можете просто использовать TypeOf.Ситуация несколько усложняется тем фактом, что вы можете иметь анонимные типы, а имя типа «t1» не обязательно будет уникальным, поскольку другой пакет может иметь тип с таким же именем.Для среды выполнения Go возможно предоставить функцию, которая дает тип из строкового имени, но я сомневаюсь, что это произойдет.