类型的方法集
类型的方法集
draft: false
url: /post/golang/method-set
每个个类型有自己的方法集。方法集主要用来确定一个类型是否实现了某个接口。
方法集组成
对于接口类型(Interface)来说,它的方法集就是定义它的方法集合。
对于其他任何的值类型 T,它的方法集由所有定义接收者是 T 的方法组成。
对于其他任何的指针类型 *T,它的方法集由所有定义接收者是 T 或者 *T 的方法组成(所以指针类型的方法集包含了值类型)。
嵌套结构体的方法集
给定一个结构体 S 和一个特定的类型 T,方法提升将按照下面的规定包含到结构体的方法集里。
-
如果 S 内嵌一个匿名字段 T,S 和 *S 的方法集都包含接受者为 T 的方法提升。
对于 *S 的方法集还包含了接收者为 *T 的方法提升
-
如果 S 内嵌一个匿名字段 *T,S 和 *S 的方法集都包含接受者为 T 或者 *T 的方法提升。
所以总结下来就是 S 内嵌一个值类型 T,那么值类型 S 不包含接收者为 *T 的方法提升。
参考
https://golang.org/ref/spec#Method_sets
https://golang.org/ref/spec#Struct_types
Read other posts