美文网首页我爱编程
关于Golang的接收者和指针接收者

关于Golang的接收者和指针接收者

作者: insanus | 来源:发表于2018-05-25 12:19 被阅读0次

接收者

接收者是将操作副本,可以理解成,在每一个方法中,它对属性的操作都是先创建一个该属性的副本,接着操作副本。

//单文件需要将包名改为main
package main

import (
  "fmt"
)

type class struct {
  data int
}

func (c class) Print() {
  fmt.Println(c.data)
}

func (c class) Change() {
  c.data = 2
}

func main() {
  /*
  output:
  1 
  */

  temp := class{1}
  temp.Change()
  temp.Print()
}

可以看出,temp的data并没有收到Change的改变。因为Change只是拷贝了一份副本,并没有对原数据进行操作。

指针接收者

//单文件需要将包名改为main
package main

import (
  "fmt"
)

type class struct {
  data int
}

func (c *class) Print() {
  fmt.Println(c.data)
}

func (c *class) Change() {
  c.data = 2
}

func main() {
  /*
  output:
  2
  */

  temp := &class{1}
  //temp = new(class)  另一种写法
  temp.Change()
  temp.Print()
}

可以看出来,指针接收者操作的是原数据。相比而言,指针接收者更像其他语言中的类的概念,其他可以类比成属性以及方法。

相关文章

  • 关于Golang的接收者和指针接收者

    接收者 接收者是将操作副本,可以理解成,在每一个方法中,它对属性的操作都是先创建一个该属性的副本,接着操作副本。 ...

  • Go 函数值接收者和指针接收者

    值接收者和指针接收者 值接收者使用值接收者声明方法,调用者会用这个值的一个副本来执行 指针接收者使用指针接收者声明...

  • 6-数据类型内存结构-interface

    1. 值接收者和指针接收者 实现了接收者是值类型的方法, 自动生成 了接收者是指针类型的方法; 实现了接收者是指针...

  • 23 Golang中的接口(三)

    结构体值接收者和指针接收者实现接口的区别 值接收者如果结构体中的方法是值接收者,那么实例化后的结构体值类型和指针类...

  • 关于指针接收者和值接收者

    方法 方法能给用户定义的类型添加新的行为。方法实际上也是函数,只是在声明时,在关键字func 和方法名之间增加了一...

  • Golang | 方法集的那些事

    类型的值也可以调用指针接收者的方法! 学习golang中关于方法部分知识的人一定了解过方法集(Method Set...

  • golang接口实现时-值接收者和指针接收者的区别

    上面的代码为notifier接口的实现,看似正常但是编译无法通过,报错信息是 之所以会报错是因为代码中使用指针实现...

  • golang函数接收器及安全问题 2022-10-20

    不管接收者类型是值类型还是指针类型,都可以通过值类型或指针类型调用 实际上,当类型和方法的接收者类型不同时,其实是...

  • Go 中的方法集合指针接收者和值接收者

    在Go语言中,可以给用户定义的类型添加新的行为。方法其实也是函数,只是在声明时,在关键字func和方法名之间增加了...

  • 2018-01-10

    是使用值接收者还是指针接收者,不应该由该方法是否修改了接收到的值来决定。这个决策 应该基于该类型的本质

网友评论

    本文标题:关于Golang的接收者和指针接收者

    本文链接:https://www.haomeiwen.com/subject/vpbyjftx.html