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?
什么是原则或翻译与此相关?
答案 0 :(得分:1)
t.Set是method value。 T.Set是method expression。
方法值t.Set
产生的函数等效于:
func(a int) ( t.Set(a) }
方法表达式T.Set
产生的函数等效于将接收者作为第一个参数的方法。
func(t T, a int) { t.Set(a) }
这个playground example说明了方法值和方法表达式之间的区别。
与关于方法表达式和方法值的讨论分开, 函数Set应该采用指针接收器。否则,丢弃对t的改变。
func (t *T) Set(a int) {
t.Tp = a
}
这是带有指针接收器的example。