很明显,下面的代码可以正常工作:
package main
import "fmt"
type T struct {
a int
}
func (t T) M() {
fmt.Println("M method")
}
func main() {
var t = &T{1}
t.M() // it's interesting
}
但正如我从规范中看到的:
对于 T 或 *T 类型的值 x(其中 T 不是指针或接口类型),xf 表示 T 中最浅深度处存在 f 的字段或方法。如果不存在恰好一个深度最浅的 f,则选择器表达式是非法的。
但在示例中M不是来自*T,而是来自T。我知道其中*T包括 的方法集T,但正如我所见,规范并没有告诉我们有关 的方法集*T。我是否理解带有注释的行的规范错误或正确性是基于其他规范规则?
波斯汪
四季花海
相关分类