• Go语言值接收者方法和指针接收者方法


     在Go语言中方法就是定义了接受者的函数,方法和函数只差了一个参数,那就是方法在 func 和标识符之间多了一个参数。接受者定义在func关键字和函数名之间:

    type Person struct {
        name string
        age int
    }
    
    func (p Person) say() {
        fmt.Printf("I'm %s,%d years old
    ",p.name,p.age)
    }

    接收者有两种,一种是值接收者,一种是指针接收者。顾名思义,值接收者,是接收者的类型是一个值,是一个副本,方法内部无法对其真正的接收者做更改;指针接收者,接收者的类型是一个指针,是接收者的引用,对这个引用的修改之间影响真正的接收者。
    先看两段代码
    代码一:
    package main
    
    import "fmt"
    
    type Person struct {
       name string
       age int
    }
    func (p Person) say() {
       fmt.Printf("I'm %s,%d years old
    ",p.name,p.age)
    }
    func (p Person) older(){
       p.age = p.age +1
    }
    func main() {
       var p1 Person = Person{"zhansan",16}
       p1.older()
       p1.say()
       //output: I'm zhangsan,16 years old
       var p2 *Person = &Person{"lisi",17}
       p2.older()
       p2.say()
       //output: I'm lisi,17 years old
    }

     输出:

    #gosetup
    I'm zhansan,16 years old
    I'm lisi,17 years old

    代码二:

    package main
    
    import "fmt"
    
    type Person struct {
        name string
        age int
    }
    func (p Person) say() {
        fmt.Printf("I'm %s,%d years old
    ",p.name,p.age)
    }
    func (p *Person) older(){
        p.age = p.age +1
    }
    func main() {
        var p1 Person = Person{"zhansan",16}
        p1.older()
        p1.say()
        //output: I'm zhangsan,17 years old
        var p2 *Person = &Person{"lisi",17}
        p2.older()
        p2.say()
        //output: I'm lisi,18 years old
    }

    输出:

    #gosetup
    I'm zhansan,17 years old
    I'm lisi,18 years old

    这两段代码唯一的区别就是在older()方法这,第一段代码是值接受者方法,第二段代码是指针接受者方法。

  • 相关阅读:
    dp学习(六)
    dp学习(五)
    电子效应
    元素周期表
    铝、元素三角与焰色反应
    化学能与原电池:知识预习
    有机化学与生产生活
    乙烯和苯:知识预习
    有机物基础和甲烷:知识预习
    解析api的json
  • 原文地址:https://www.cnblogs.com/tianyun5115/p/12613036.html
Copyright © 2020-2023  润新知