一句话总结:方法的接收者receiver是t T时,值可以是T或着*T;如果接收者是t *T时,值只能是*T。若要修改对象,选择指针传递。
package main
import "fmt"
type person struct {
name string
age int
}
func (p person) setName(name string) {
p.name = name
}
func (p person) getName() string {
return p.name
}
func (p *person) setAge(age int) {
p.age = age
}
func (p *person) getAge() int {
return p.age
}
func changeName(p person, name string) {
p.setName(name)
}
func changeAge(p *person, age int) {
p.setAge(age)
}
func main() {
p := person{"jack", 23}
p.setName("Nick")
p.setAge(44)
changeName(p, "Nick")
changeAge(&p, 55)
fmt.Println(p.getName())
fmt.Println(p.getAge())
p2 := &person{"jacky", 23}
p2.setName("Nick")
p2.setAge(44)
changeName(*p2, "Nick")
changeAge(p2, 66)
fmt.Println(p2.getName())
fmt.Println(p2.getAge())
}
结果:
jack
55
jacky
66
成功: 进程退出代码 0.