Go规范说:
任何其他类型 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 上调用“of *T”的方法?我有一个更广泛的例子http://play.golang.org/p/RROPMj534A,这也让我感到困惑。是否有一些反之亦然的类型推断?
我是否遗漏了什么,或者我的逻辑不正确?
相关分类