猿问

Go 方法集 — 使用接收器 T 调用指针类型 *T 的方法

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,这也让我感到困惑。是否有一些反之亦然的类型推断?

我是否遗漏了什么,或者我的逻辑不正确?


桃花长相依
浏览 181回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答