去规范说:
任何其他类型 T 的方法集由所有接收者类型为 T 的方法组成。对应指针类型 *T 的方法集是所有接收者为 *T 或 T 的方法集(即它还包含T)。
我理解为:T有自己的方法集,而*T有自己的方法集加上T的方法集,因为它可以将接收者*T解引用到T并调用方法。因此,我们可以使用变量类型 T 的接收者 *T 来调用一些方法。
所以我决定验证我的逻辑:
package main
import (
"fmt"
"reflect"
)
type User struct{}
func (self *User) SayWat() {
fmt.Println(self)
fmt.Println(reflect.TypeOf(self))
fmt.Println("WAT\n")
}
func main() {
var user User = User{}
fmt.Println(reflect.TypeOf(user), "\n")
user.SayWat()
}
http://play.golang.org/p/xMKuLzUbIf
我有点困惑。看起来我可以在 T 上调用“* T”方法?我有一个更广泛的例子http://play.golang.org/p/RROPMj534A,这也让我感到困惑。是否有一些反之亦然的类型推断?
我错过了什么,还是我的逻辑不正确?
谢谢!