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} |
可以看出,不论调用者是值还是指针,对于指针接收者方法和值接收者方法,都可以调用。而且指针接收者方法是可以修改调用者(结构体)的内部值,值接收者方法则不行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?