假设我定义了以下类型:
type ID uuid.UUID
我将如何以编程方式将类型作为字符串获取,因此以后可能很容易重构,而不是:
fmt.Sprintf("%T", ID{})
我不太喜欢,因为它实例化了它,也可以从Interface实例化。
您可以使用包装reflect(fmt包装也可以在内部使用)。您可以从 指向 该类型的 指针 开始,并使用没有分配的 类型化nil_指针值,并且可以使用来从其reflect.Type描述符导航到指针的 _基本 类型(或 元素 类型)的描述符Type.Elem()。
reflect
fmt
nil
reflect.Type
Type.Elem()
例:
t := reflect.TypeOf((*ID)(nil)).Elem() name := t.Name() fmt.Println(name)
输出(在Go Playground上尝试):
ID
注意:请注意,Type.Name()可能会返回一个空值string(如果Type表示未命名的类型)。如果您正在使用类型声明(带有type关键字),则您已经命名了该类型,因此Type.Name()将返回一个非空的类型名称。但是*[]string,例如,将上面的代码用于类型变量将为您提供一个空字符串:
Type.Name()
string
Type
type
*[]string
var s *[]string t := reflect.TypeOf(s).Elem() name := t.Name() fmt.Printf("%q", name)
""