alias类型继承的方法集合

alias类型继承的方法集合

Content #

基于类型别名(type alias)定义的新类型有没有“继承”原类型的方法集合呢?我们还是来看一个例子:

type T struct{}
func (T) M1()  {}
func (*T) M2() {}
type T1 = T
func main() {
    var t T
    var pt *T
    var t1 T1
    var pt1 *T1
    dumpMethodSet(t)
    dumpMethodSet(t1)
    dumpMethodSet(pt)
    dumpMethodSet(pt1)
}

我们看一下这个例子的输出结果:

main.T's method set:
- M1
main.T's method set:
- M1
*main.T's method set:
- M1
- M2
*main.T's method set:
- M1
- M2

我们看到, dumpMethodSet 函数甚至都无法识别出“类型别名”,无论类型别名还是原类型,输出的都是原类型的方法集合。

无论原类型是接口类型还是非接口类型,类型别名都与原类型拥有完全相同的方法集合。

Viewpoint #

From #