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语言值接收者方法和指针接收者方法介绍完成。