介面多型性

介面提供了一種指定物件行為的方法,如果有什麼可以做到這一點,那麼它可以在這裡使用。介面定義了一組方法,但這些方法不包含程式碼,因為它們是抽象的,或者實現留給介面的使用者。與大多數面嚮物件語言不同,介面可以包含 Go 中的變數。

多型性是物件導向程式設計的本質:只要它們遵循相同的介面,就能統一處理不同型別的物件。Go 介面以非常直接和直觀的方式提供此功能

package main

type Runner interface {
    Run()
}

type Admin struct {
    Username, Password string
}

func (admin Admin) Run() {
    fmt.Println("Admin ==> Run()");
}

type User struct {
    ID uint64
    FullName, Email string
}

func (user User) Run() {
    fmt.Println("User ==> Run()")
}

// RunnerExample takes any type that fullfils the Runner interface
func RunnerExample(r Runner) {
    r.Run()
}

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

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

    RunnerExample(admin)

    RunnerExample(user)
    
}