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

Posted 张志翔ۤ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言值接收者方法和指针接收者方法相关的知识,希望对你有一定的参考价值。

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

type Person struct {
    name string
    age int
}

func (p Person) say() {
    fmt.Printf("I'm %s,%d years old\\n",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\\n",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\\n",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()方法这,第一段代码是值接受者方法,第二段代码是指针接受者方法。

        到此 Go语言值接收者方法和指针接收者方法介绍完成。

以上是关于Go语言值接收者方法和指针接收者方法的主要内容,如果未能解决你的问题,请参考以下文章

方法--Go语言学习笔记

Go小知识新解

go语言-interface的值接收和指针接受的区别

go语言-interface的值接收和指针接受的区别

go语言-interface的值接收和指针接受的区别

Go语言基础:结构体