golang方法的接收者有两种:值接收者与指针接收者。
平时使用中两种接收者的主要区别就是能不能修改接收者的内部值。
先说结论:值接收者方法不能修改结构体内部的值,指针接收者方法可以修改结构体内部的值。
做个测试:
type Student struct { age int } func (s Student) SetAge(age int) { s.age = age } func (s *Student) SetAge2(age int) { s.age = age } func main() { st1 := Student{} st2 := &Student{} st1.SetAge(11) fmt.Println("st11:", st1) st1.SetAge2(12) fmt.Println("st12:", st1) st2.SetAge(21) fmt.Println("st21:", st2) st2.SetAge2(22) fmt.Println("st22:", st2) }
输出结果:
st11: {0} st12: {12} st21: &{0} st22: &{22}
可以看出,不论是指针接收者还是值接收者,对于指针方法和值方法,都可以调用。而且指针方法是可以修改接收者(结构体)的内部值,值方法则不行。
标签:st2,age,接收者,golang,st1,Student,指针 From: https://www.cnblogs.com/zxq89/p/17766429.html