4.4.4-7 Named 类型
Named 结构用来表示 Defined Types, 即通过语法结构
type A β
或者type A = β
定义的类型,其中 β 表示任何合法的表达式,例如如果 β 表示struct {...}
, 则整个声明就是一个 struct 结构体。type A = β
叫着类型别名,是 go 1.9 引入的语法,通常情况下这种用法中 β 都是一个具体的类型名字,假设为 B,则此时 A 与 B 完全是一样的类型,纯粹只是为类型 B 引入一个别名。可以参考Russ Cos 的文章了解使用场景。而
type A β
则会创建一个新的类型,A 的 underlying type 是 β 所表示的类型, 例如如果 β 表示struct {...}
, 则其类型就是上文提到的 Struct 类型;如果 β 是一个具体的类型名字,例如 C, 那么 A 的 underlying type 就是 C. 后面有专门的章节讨论Underlying Type.Named结构定义如下:
type Named struct {
check *Checker // for Named.under implementation
info typeInfo
obj *TypeName // corresponding declared object
orig Type // type (on RHS of declaration) this *Named type is derived of (for cycle reporting)
underlying Type // possibly a *Named during setup; never a *Named once set up completely
tparams []*TypeName // 类型参数名字,用于泛型
targs []Type // 类型参数的限定类型(constraint)
methods []*Func // 与该类型绑定的方法
}