2 个回答

这个是一种规范,与性能无关

不同点:
1.如果用函数调用,函数名不可重复,绑定方法则可以
2.使用方法绑定更符合面向对象编程的思想
3.可以构造类似orm中的Where(xxx).Find(xx)这种链式写法。函数只能内部嵌套Find(Where(xxx))。

性能上,首先以下这两种写法是等价的:

type TestTP struct {
   Age int
}
func (t *TestTP) A() int {
   t.Age++
 return t.Age
}
func main() {
   t := &TestTP{Age: 11}
   print((*TestTP).A(t))  // 12
   print(t.A())    // 13 
}

由此可以大致推测:函数可以理解为一个是全局的方法,一个是该struct的方法,性能上应该没有什么差别。 从汇编结果来看唯一的区别在于:0x0080 00128 (main.go:15) CALL "".(*TestTP).A(SB)也差不多是这个意思,多了个转换。因此性能上不会有大的影响。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题