我正在将程序从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
答案 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。