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

时间:2017-01-28 00:42:04

标签: go reflection types

假设我定义了以下类型:

url = reverse_lazy('embedded:activity_status')
params = urlencode({'unieke_code': self.object.access_link})
return '{0}?{1}'.format(url, params)

如何以编程方式将类型作为字符串获取,以便以后可以轻松进行重构:

type ID uuid.UUID

我不太喜欢因为它实例化它,也来自接口。

1 个答案:

答案 0 :(得分:2)

您可以使用包reflectfmt包也可以使用它)。您可以从指针开始到该类型,并使用类型nil 指针值而不进行分配,您可以从其reflect.Type描述符导航使用Type.Elem()指向 base 类型(或元素类型)的描述符。

示例:

t := reflect.TypeOf((*ID)(nil)).Elem()
name := t.Name()
fmt.Println(name)

输出(在Go Playground上尝试):

ID

注意:请注意,Type.Name()可能会返回空string(如果Type代表未命名的类型)。如果您使用type declaration(使用type关键字),那么您已经为该类型命名,因此Type.Name()将返回非空类型名称。但是,对于类型为*[]string的变量,使用上面的代码将为您提供一个空字符串:

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

输出(在Go Playground上尝试):

""

参见相关问题:

Golang reflect: Get Type representation from name?

Identify non builtin-types using reflect