是否可以在golang中使用反射来获取用户定义类型的基础类型?

时间:2018-11-01 14:43:03

标签: go

我有这种类型:

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
}

2 个答案:

答案 0 :(得分:4)

您可以致电Type.Kind(),这将使您返回these constants之一

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)

答案 1 :(得分:3)

并非完全是“基础类型”,但是对于您的情况,您不想要它,而是想要Kind中的Type.Kind()

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

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

请注意,种类不是与“底层类型”的同义词,这并不是什么东西,您可以在此处看到:https://play.golang.org/p/900YGm2BnPV