golang值接收者与指针接收者(一)
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}
可以看出,不论调用者是值还是指针,对于指针接收者方法和值接收者方法,都可以调用。而且指针接收者方法是可以修改调用者(结构体)的内部值,值接收者方法则不行。

浙公网安备 33010602011771号