Go 类型方法不等于实例方法

type T struct {

    Tp int

}


func (t T) Set(a int) {


    t.Tp = a

}

func main() {

    t := T{}

    fmt.Println(reflect.TypeOf(t.Set))

    fmt.Println(reflect.TypeOf(T.Set))

}


result :

func(int)

func(main.T, int)

为什么 T.set 不等于 t.set?

什么是原则或翻译?


http://play.golang.org/p/xYnWZ3PlyF


汪汪一只猫
浏览 209回答 1
1回答

翻翻过去那场雪

t.Set 是一个方法值。T.Set 是一个方法表达式。方法值t.Set产生一个等价于的函数:func(a int) ( t.Set(a) }方法表达式T.Set产生一个函数,该函数等效于以接收者作为第一个参数的方法。func(t T, a int) { t.Set(a) }这个Playground 示例说明了方法值和方法表达式之间的区别。与关于方法表达式和方法值的讨论不同,函数 Set 应该接受一个指针接收器。否则,对 t 的更改将被丢弃。func (t *T) Set(a int) {   t.Tp = a}这是指针接收器的示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go