方法

在 Go 中,方法是

作用於某種型別的變數的函式,稱為接收器

接收器可以是任何東西,不僅僅是 structs,甚至是 function,內建型別的別名型別如 intstringbool 可以有一個方法,這個規則的一個例外是 interfaces(稍後討論)不能有方法,因為 interface 是一個抽象定義,一個方法是一個實現,試圖生成一個編譯錯誤。

結合 structsmethods,你可以在物件導向的程式設計中得到一個非常接近的 class

Go 中的方法具有以下簽名

func (name receiverType) methodName(paramterList) (returnList) {}

package main

type Admin struct {
    Username, Password string
}

func (admin Admin) Delete() {
    fmt.Println("Admin Deleted")
}

type User struct {
    ID uint64
    FullName, Email string
    Admin
}

func (user User) SendEmail(email string) {
    fmt.Printf("Email sent to: %s\n", user.Email)
} 

func main() {
    admin := Admin{
        "zola",
        "supersecretpassword",
    }

    user := User{
        1,
        "Zelalem Mekonen",
        "zola.mk.27@gmail.com",
        admin,
    }

    user.SendEmail("Hello") // Email sent to: zola.mk.27@gmail.com

    admin.Delete() // Admin Deleted
}