1.二者的书写方式不同
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。