go中指向结构的指针的类型反射

go中指向结构的指针的类型反射,go,pointers,reflection,Go,Pointers,Reflection,当我只有一个指向结构的指针时,我在确定结构的类型时遇到了问题 type TypeA struct { Foo string } type TypeB struct { Bar string } 我必须实现以下回调: func Callback(param interface{}) { } param可以是*TypeA或*TypeB 如何确定param的类型 reflect.TypeOf(param)似乎无法使用指针 当我这么做的时候 func Callback(param int

当我只有一个指向结构的指针时,我在确定结构的类型时遇到了问题

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
是未命名的类型,因此查询它们的名称将得到空字符串。使用
Type.Elem()
获取元素类型,并打印其名称:

func Callback(param interface{}) {
    n := reflect.TypeOf(param).Elem().Name()
    fmt.Println(n)
}
测试它:

Callback(&TypeA{})
Callback(&TypeB{})
哪个将输出(在上尝试):

另一个选项是使用
Type.String()
方法:

func Callback(param interface{}) {
    n := reflect.TypeOf(param)
    fmt.Println(n.String())
}
这将输出(在上尝试):

见相关问题:

func Callback(param interface{}) {
    n := reflect.TypeOf(param)
    fmt.Println(n.String())
}
*main.TypeA
*main.TypeB