GO语言基础教程(116)Go方法之指针接收者方法:Go方法探秘:指针接收者,让你的代码既省空间又高效!

Go指针接收者详解

在Go语言中,方法接收者的选择,就像选择与咖啡一样——值接收者是喝一杯复制出的咖啡,而指针接收者是直接喝原杯里的咖啡。今天,就让我们一起揭开指针接收者的神秘面纱!

1. 方法接收者:Go方法的核心概念

在Go语言中,方法是绑定到特定类型的函数。它与普通函数的区别在于方法有一个"接收者",这个接收者就像是方法的主人,指明了这个方法是属于哪种类型的。

想象一下,你有一家宠物店,你可以定义"狗"的方法和"猫"的方法。比如狗会有"吠叫()"方法,猫会有"喵喵叫()"方法。这里的狗和猫就是接收者。

方法的定义语法如下:

func (接收者名 接收者类型) 方法名(参数列表) 返回值列表 {
    // 方法体
}

来看一个简单的例子:

type Person struct {
    Name string
    Age  int
}

// 这是一个方法:SayHello
func (p Person) SayHello() {
    fmt.Printf("大家好,我叫%s,今年%d岁了。\n", p.Name, p.Age)
}

这段代码中,(p Person)就是接收者,它表示SayHello()方法是属于Person类型的。有了这个方法,所有的Person对象就都能自我介绍啦!

2. 值接收者 vs 指针接收者:关键差异

2.1 值接收者:操作副本的安全之道

值接收者就像是复印了一份重要文件,然后在复印件上修改,无论你在复印件上怎么涂画,原始文件都安然无恙。

func (p Person) SetName(name string) {
    p.Name = name // 改的是副本,原始对象不变
}

当你调用值接收者方法时,Go会创建接收者的一个完整副本,方法内所有的操作都作用于这个副本上。

2.2 指针接收者:操作原件的直接方式

指针接收者则像是直接拿到原始文件进行修改,所有的更改都会直接影响原始对象。

func (p *Person) UpdateAge(age int) {
    p.Age = age // 修改的是原始对象
}

指针接收者接收的是原始对象的内存地址,而不是副本。方法内的操作会直接改变原始对象的状态。

2.3 直观对比:看看实际效果

让我们通过一个完整的例子来感受两者的区别:

package main

import "fmt"

type Person struct {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值