package main //总结:值接收者使用值的副本来调用方法,而指针接收者使用实际值来调用方法! import ( "fmt" ) //声明一个用户结构体 type user struct{ name string email string } //声明值类型接受者方法 func (u user) notify(){ fmt.Println(u.email,u.name) } //声明指针类型接受者方法 修改email属性 func (u *user) changeEmail(email string){ u.email = email } //声明值类型接受者方法 修改email属性 func (u user) chem(email string) { u.email = email } func main(){ nill := user{"123","1@qq"} nill.notify() lisa := &user{"lisab","123@qq.com"} lisa.notify() //一个值类型的结构体方法 试图修改一个地址类型的结构体的内部属性 不生效! 他修改的应该是指向这个地址的副本的值 lisa.chem("使用指针的值来调用值接收者声明的方法") lisa.notify() //输出 “123@qq.com lisab” //以下两种生效 lisa.changeEmail("指针类型的值调用指针接收者声明的方法") lisa.notify() nill.changeEmail("使用值来调用指针接收者声明的方法") // 等于 (&nill).changeEmail("...") nill.notify() }