golang中方法的receiver为指针和不为指针有什么区别,在这里我以简单易懂的方法进行说明。
先想一想编程语言中方法是什么,和函数有什么区别?
方法其实就是一种特殊的函数,receiver就是隐式传入的第一实参。
什么情况下用 value receiver 什么情况下用 pointer receiver
type T struct {
a int
}
func (tv T) Mv(a int) int { return 0 } // value receiver
func (tp *T) Mp(a int) int { return 1 } // pointer receiver
receiver 类型是基础类型,例如slices, and small structs等值传递是更高效。very cheap so unless the semantics of the method requires a pointer, a value receiver is efficient and clear."
有如下性能测试
// Struct one empty string property
BenchmarkChangePointerReceiver 2000000000 0.36 ns/op
BenchmarkChangeItValueReceiver 500000000 3.62 ns/op
// Struct one zero int property
BenchmarkChangePointerReceiver 2000000000 0.36 ns/op
BenchmarkChangeItValueReceiver 2000000000 0.36 ns/op
两者区别与总结
适用