如何解决转到结构体的指针的类型反射
当我只有一个指向结构的指针时,我在确定结构的类型时遇到了问题。
type TypeA struct {
Foo string
}
type TypeB struct {
Bar string
}
我必须实现以下回调:
func Callback(param interface{}) {
}
param
可以是*TypeA
或*TypeB
。
如何确定param
的类型?
reflect.TypeOf(param)
似乎不适用于指针。
当我这样做
func Callback(param interface{}) {
n := reflect.TypeOf(param).Name()
fmt.Printf(n)
}
输出为空
在此先感谢您的帮助。
解决方法
像
*TypeA
这样的指针类型是 unnamed 类型,因此查询它们的名称将得到一个空字符串。使用Type.Elem()
来获取元素类型,并打印其名称:
func Callback(param interface{}) {
n := reflect.TypeOf(param).Elem().Name()
fmt.Println(n)
}
测试:
Callback(&TypeA{})
Callback(&TypeB{})
哪个会输出(在Go Playground上尝试):
TypeA
TypeB
另一种选择是使用Type.String()
方法:
func Callback(param interface{}) {
n := reflect.TypeOf(param)
fmt.Println(n.String())
}
这将输出(在Go Playground上尝试):
*main.TypeA
*main.TypeB
查看相关问题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。