指標 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
}