2016-01-29 53 views
0

我将一个程序从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 

回答

2

基础类型的main.Tint,不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。

相关问题