golang的值接收者和指针接收者的区别
方法
方法能给用户自定义的类型添加新的行为。方法和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接收者,也可以是指针接收者。
我们在调用方法的时候,值类型既可以调用值接收者的方法,也可以调用指针接收者的方法;
指针类型既可以调用指针接收者的方法,也可以调用值接收者的方法。
也就是说,不管方法的接收者是什么类型,该类型的值和指针都可以调用,不必严格符合接收者的类型。下面的一个实例可以验证这个结论:
package main
import "fmt"
type Person struct {
name string
age int
}
func (p Person) howOld() int {
fmt.Printf("internal howOld, addrss is %p \n", &p)
return p.age
}
func (p Person) howOld2() int {
fmt.Printf("internal howOld2, addrss is %p \n", &p)
return p.age
}
func (p *Person) growUp() {
fmt.Printf("internal growUp, addrss is %p \n", p)
p.age += 1
}
func main(