Go 中的面向对象
Go 不是基于 class 的语言,但是 Go 提供了强大的类型系统来实现 OO(Object Oriented),关于如何正确使用 OO 的争论网上已经非常多了,在此我们秉承 Go 提供的面向对象机制来实现不同的例子和使用模式,借此了解 Go 中的 OO。
使用 embed type 实现继承Go
...
1 |
|
首先 interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为。
go 允许不带任何方法的 interface ,这种类型的 interface 叫 empty interface。
如果一个类型实现了一个 interface 中所有方法,我们说类型实现了该 interface,所以所有类型都实现了 empty interface,因为任何一种类型至少实现了 0 个方法。go 没有显式的关键字用来实现 interface,只需要实现 interface 包含的方法即可。
在 web 编程中,经常有业务需要在处理请求时做异步操作,比如耗时太长的 IO 操作,等异步执行完成之后再结束请求返回 response 到 client,在这个过程中 client 和 server 一直保持着连接不释放,也就是当前请求在从 client 的角度看一直处于阻塞状态,直到请求结束。
之所以称之为异步,最重要的特征就是 server 可以继续处理其他 request 而不被阻塞。
不同语言在处理这种异步场景的方式是截然不同的,常见的处理策略有:消息共享(异步任务队列)、多线程多进程、event(linux signals,nodejs event loop)、协程 coroutine(返回 Future、Promise 代表程序执行的未来状态),其中 coroutine 是应用最广泛的,这也是今天此篇的主题。