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

短命女 2022-04-23 23:50 309阅读 0赞

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

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

什么是值类型方法集合?

先看一段代码:

  1. type people struct {
  2. Name string
  3. Age int
  4. }
  5. func (p people) SetName(name string) {
  6. p.Name = name
  7. }
  8. func (p people) SetAge(age int) {
  9. p.Age = age
  10. }

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

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

还是先看一段代码:

  1. type people struct {
  2. Name string
  3. Age int
  4. }
  5. func (p *people) SetName(name string) {
  6. p.Name = name
  7. }
  8. func (p *people) SetAge(age int) {
  9. p.Age = age
  10. }

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

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

比如这样的:(代码1)

  1. type people struct {
  2. Name string
  3. Age int
  4. }
  5. func (p *people) SetName(name string) {
  6. p.Name = name
  7. }
  8. func (p people) SetAge(age int) {
  9. p.Age = age
  10. }

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

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读