界面多态性

接口提供了一种指定对象行为的方法,如果有什么可以做到这一点,那么它可以在这里使用。接口定义了一组方法,但这些方法不包含代码,因为它们是抽象的,或者实现留给接口的用户。与大多数面向对象语言不同,接口可以包含 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)
    
}