方法

在 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
}