golang值接收者与指针接收者(一)

发布时间 2023-10-15 23:07:51作者: _zxq

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}

  可以看出,不论是指针接收者还是值接收者,对于指针方法和值方法,都可以调用。而且指针方法是可以修改接收者(结构体)的内部值,值方法则不行。