为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
汪汪一只猫 2021-09-10 21:40:49
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
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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

}

这是指针接收器的示例。


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信