eg:
func(a *obj) A(param string){
}
func A(param string){
}
eg:
func(a *obj) A(param string){
}
func A(param string){
}
不同点:
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)
也差不多是这个意思,多了个转换。因此性能上不会有大的影响。
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
1 回答1.5k 阅读
这个是一种规范,与性能无关