首先说下结论
1. 无论方法的接受者是值接受者还是指针接受者,对象值调用该方法和对象指针调用该方法都是可行的。
2. 当方法接受者为指针接受者时,对象的值调用该方法和指针调用该方法都会操作对象本身。
3. 当方法接受者为值接受者时,对象的值调用该方法和指针调用该方法都会操作对象的副本,对对象本身无影响。
1package method 2 3import "fmt" 4 5type student struct { 6 name string 7 age int8 8} 9 10func (student student) getName() string { 11 student.name = "jack" 12 return student.name 13} 14 15// 接受者为指针的方法 16//func (student *student) getName() string { 17// student.name = "jack" 18// return student.name 19//} 20 21func (student student) getAge() int8 { 22 student.age = 22 23 return student.age 24} 25 26// 接受者为指针的方法 27//func (student *student) getAge() int8 { 28// student.age = 22 29// return student.age 30//} 31 32func TestMethod() { 33 s := student{name: "tom", age: 11} 34 35 // 值调用方法 36 //fmt.Println("age: ", s.getAge()) 37 //fmt.Println("name: ", s.getName()) 38 39 // 指针调用方法 40 fmt.Println("age: ", (&s).getAge()) 41 fmt.Println("name: ", (&s).getName()) 42 43 // 查看调用方法后,对象本身的影响 44 fmt.Println(s.age) 45 fmt.Println(s.name) 46 fmt.Println((&s).age) 47 fmt.Println((&s).name) 48}