面向接口编程

目录

如果你听说过面向对象编程,那么你很有可能也听说过面向接口编程。面向接口编程的核心思想是,只要你实现了这个方法,你就符合这个 接口。听起来有点玄乎,看个例子吧:

package main

import (
	"fmt"
)

type Walker interface {
	Walk()
}

type Animal struct {
}

func (a *Animal) Walk() {
	fmt.Println("Animal walk")
}

type Duck struct {
	Animal
	Color string
}

func main() {
	var x Walker = &Duck{}
	x.Walk()
}

Go语言中不需要像Java那样显示的声明是否实现了某个接口,编译器会自动检测,如果实现了接口所要求的所有函数,那么这个实例就 符合该接口。

请注意,倒数第三行,为什么要写成 var x Walker = &Duck{} 而不是 var x Walker = Duck{} 呢?

正如上面所说,实现了 Walk 这个方法的类型,是 *Animal,而不是 Animal,因此,只有 *Animal, *Duck 符合这个接口的定义, AnimalDuck 却不符合。Go并没有在这种情况下帮我们做自动转换。



微信公众号
关注公众号,获得及时更新

更多文章
  • 怎么使用ViewModel 和 RecyclerView
  • Android手动挡MVVM
  • 来电拦截方案
  • 你好,2021!
  • gRPC鉴权方案
  • Golang里数据库migration方案
  • Android SwipeRefreshLayout左右滑动冲突的解决
  • Android调用gRPC的两个小工具函数
  • Android上结合kotlin使用coroutine
  • gRPC错误处理
  • Java collection的结构
  • 为啥Redis使用pipelining会更快?
  • 通过阳台种菜实现蔬菜自由
  • 从GORM里学习到的panic处理方式
  • Go使用闭包简化数据库操作代码