type student struct {
age int8
name string
}
//指针接收器
func(s *student) ageAdd1(){
s.age+=1
}
//非指针接收器
func(s student) ageAdd2(){
s.age+=1
}
2.二者传入方法中的对象不同
指针接收器传入的是struct本身,非指针接收器传入的是struct的copy副本
3.二者访问struct的级别不同指针接收器可以读写struct中的内容,非指针接收器只能读取struct中的数据但是不能写入,如果写入的话也只是写入到struct的备份中而已。
type student struct {
age int8
name string
}
func(s *student) ageAdd1(){
s.age+=1
}
func(s student) ageAdd2(){
s.age+=1
}
func(s student) ageAdd3() student{
s.age+=1
return s
}
func main(){
student:=new(student)
student.ageAdd1()
fmt.Println(student.age)
student.ageAdd2()
fmt.Println(student.age)
student2:=student.ageAdd3()
fmt.Println(student2.age)
}
/*
结果
1
1
2
*/
ageAdd1和ageAdd2分别是指针接收器和非指针接收器接收的函数,二者对age都进行+1操作后输出的student中的age都是1,由此可见student中的age进行 +1操作只有ageAdd1进行的一次,ageAdd2对age进行+1操作完全没影响student。
ageAdd3给student副本进行+1操作后返回了student的副本student2,由于ageAdd2之前对副本进行过+1操作,所以student2中的age是2。