golang的值接收者和指针接收者的区别

本文探讨了Golang中方法的值接收者和指针接收者的区别。值接收者方法不会影响原始调用者,而指针接收者方法可以直接修改接收者指向的对象。Golang会为值接收者方法自动实现指针接收者方法,但反之则不然。选择使用哪种接收者取决于是否需要修改对象以及效率考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang的值接收者和指针接收者的区别

方法

方法能给用户自定义的类型添加新的行为。方法和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接收者,也可以是指针接收者

我们在调用方法的时候,值类型既可以调用值接收者的方法,也可以调用指针接收者的方法;
指针类型既可以调用指针接收者的方法,也可以调用值接收者的方法。

也就是说,不管方法的接收者是什么类型,该类型的值和指针都可以调用,不必严格符合接收者的类型。下面的一个实例可以验证这个结论:

package main

import "fmt"

type Person struct {
   
   
	name string
	age int
}

func (p Person) howOld() int {
   
   
	fmt.Printf("internal howOld, addrss is %p \n", &p)
	return p.age
}

func (p Person) howOld2() int {
   
   
	fmt.Printf("internal howOld2, addrss is %p \n", &p)
	return p.age
}

func (p *Person) growUp() {
   
   
	fmt.Printf("internal growUp, addrss is %p \n", p)
	p.age += 1
}


func main(
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值