美文网首页我爱编程
关于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的接收者和指针接收者

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