有可能在golang中使用反射来获取用户定义类型的底层类型吗



我有这种类型:

type T string

我可以获得T对象的基本类型吗?例如:

package main
import (
"fmt"
"reflect"
)
type T string
func main() {
var t = T("what")
tt := reflect.TypeOf(t)
fmt.Println(tt) // prints T, i need string
}

不完全是"底层类型",但对于您的情况,您不想要它,您想要它的Kind,来自Type.Kind():

var t = T("what")
k := reflect.TypeOf(t).Kind()
fmt.Println(k)

可播放的示例:https://play.golang.org/p/M75wsTwUHkv

请注意,Kind并不是"底层类型"的同义词,这并不是一件真正的事情,正如您在这里看到的那样:https://play.golang.org/p/900YGm2BnPV

您可以调用Type。Kind((,它将返回其中一个常量

fmt.Println(tt.Kind()) // prints string

如果您不知道它是否是指针,则需要进行额外的检查并调用Type。Elem((

var kind reflect.Kind 
if tt.Kind() == reflect.Ptr {
kind = tt.Elem().Kind()
} else {
kind = tt.Kind()
}
fmt.Println(kind)

最新更新