假设我定义了以下类型:
url = reverse_lazy('embedded:activity_status')
params = urlencode({'unieke_code': self.object.access_link})
return '{0}?{1}'.format(url, params)
如何以编程方式将类型作为字符串获取,以便以后可以轻松进行重构:
type ID uuid.UUID
我不太喜欢因为它实例化它,也来自接口。
答案 0 :(得分:2)
您可以使用包reflect
(fmt
包也可以使用它)。您可以从指针开始到该类型,并使用类型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上尝试):
""
参见相关问题: