反思:是否有可能获得基础类型信息?

时间:2016-01-29 01:18:16

标签: reflection go

我正在将程序从go/ast移植到reflect。为了传递测试,如果基础类型不是内置的,我不仅需要获取顶级类型信息,还需要获取基础类型。

在下面的例子中,程序是否可以知道main.T的基础类型是main.TT?

package main

import "fmt"
import "reflect"

func main() {
    type TT int
    type T TT

    x := T(0)
    fmt.Println(reflect.TypeOf(x))
}

输出:

 main.T

1 个答案:

答案 0 :(得分:2)

main.T的基础类型为int,而不是main.TT。反射包不知道main.T已声明main.TT

这是specification has to say about underlying types

的内容
  

每个类型T都有一个基础类型:如果T是预先声明的布尔,数字或字符串类型之一,或者是类型文字,则相应的基础类型是T本身。否则,T的底层类型是T在其类型声明中引用的类型的基础类型。

type T1 string
type T2 T1
type T3 []T1
type T4 T3
     

字符串的基础类型T1和T2是字符串。 [] T1,T3和T4的基础类型是[] T1。