golang中值类型方法集合和指针类型方法有什么区别?

本文深入探讨Golang中值类型方法集合与指针类型方法集合的区别,通过具体代码示例,讲解了如何定义这两种类型的方法,以及它们在修改结构体字段时的不同表现。指出值类型方法集合是其对应指针类型方法集合的真子集。

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

什么是值类型方法集合?

先看一段代码:

type people struct {
	Name string
	Age  int
}

func (p people) SetName(name string) {
	p.Name = name
}

func (p people) SetAge(age int) {
	p.Age = age
}

SetName 和 SetAge 两个方法的接受类型(方法名左边括号中变量的类型都是people)都是值类型(people类型非指针类型),那么我们就说SetName和SetAge这两个方法都是值类型方法集合。

什么是指针类型方法集合?

还是先看一段代码:

type people struct {
	Name string
	Age  int
}

func (p *people) SetName(name string) {
	p.Name = name
}

func (p *people) SetAge(age int) {
	p.Age = age
}

SetName 和 SetAge 两个方法的接受类型(方法名左边括号中变量的类型都是*people)都是指针类型(*people类型引用类型),那么我们就说SetName和SetAge这两个方法都是指针类型方法集合。

接受方法类型既有值类型又有指针类型,有什么区别?

比如这样的:(代码1)

type people struct {
	Name string
	Age  int
}

func (p *people) SetName(name string) {
	p.Name = name
}

func (p people) SetAge(age int) {
	p.Age = age
}

先说答案:值类型方法集合为 SetAge;指针方法集合为:SetName,SetAge。
相信你已经有答案了,指针类型方法集合包括值类型方法集合同时加上接收类型为引用类型的方法。用数学上集合来表示范围就是:值类型方法集合是指针类型方法集合的真子集。qianr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值