小编典典

如何获取类型的字符串表示形式?

go

假设我定义了以下类型:

type ID uuid.UUID

我将如何以编程方式将类型作为字符串获取,因此以后可能很容易重构,而不是:

fmt.Sprintf("%T", ID{})

我不太喜欢,因为它实例化了它,也可以从Interface实例化。


阅读 313

收藏
2020-07-02

共1个答案

小编典典

您可以使用包装reflectfmt包装也可以在内部使用)。您可以从
指向 该类型的 指针 开始,并使用没有分配的
类型化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,例如,将上面的代码用于类型变量将为您提供一个空字符串:

var s *[]string
t := reflect.TypeOf(s).Elem()
name := t.Name()
fmt.Printf("%q", name)

输出(在Go Playground上尝试):

""
2020-07-02