指针 Vs 值接收器
方法的接收器通常是性能原因的指针,因为我们不会复制实例,就像值接收器中的情况一样,如果接收器类型是结构,则尤其如此。anoter 使接收器类型成为指针的原因是我们可以修改接收器指向的数据。
值接收器用于避免修改接收器包含的数据,如果接收器是大结构,则 vaule 接收器可能导致性能损失。
package main
type User struct {
ID uint64
FullName, Email string
}
// We do no require any special syntax to access field because receiver is a pointer
func (user *User) SendEmail(email string) {
fmt.Printf("Sent email to: %s\n", user.Email)
}
// ChangeMail will modify the users email because the receiver type is a ponter
func (user *User) ChangeEmail(email string) {
user.Email = email;
}
func main() {
user := User{
1,
"Zelalem Mekonen",
"zola.mk.27@gmail.com",
}
user.SendEmail("Hello") // Sent email to: zola.mk.27@gmail.com
user.ChangeEmail("zola@gmail.com")
fmt.Println(user.Email) // zola@gmail.com
}