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