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

golang函数方法的接收者有两种:值接收者与指针接收者。

平时使用中两种类型的主要区别就是能不能修改调用者的内部值。

先说结论:值接收者方法不能修改调用者内部的值,指针接收者方法可以修改调用者内部的值。

做个测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
}   

  输出结果:

1
2
3
4
st11: {0}
st12: {12}
st21: &{0}
st22: &{22}

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

 

posted @   _zxq  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示