golang通用连接池的实现
2018年2月1日 · 321 字 · 2 分钟
golang的channel除了goroutine通信之外还有很多其他的功能,本文将实现一种基于channel的通用连接池。 何为通用? 连接池的实现不依赖具体的实例,而依赖某个接口,本文的连接池选用的是io.Closer接口,只要是实现了该接口的对象都可以被池管理。 当然,你可以实现基于interface{}的连接池,这样任何对象都可以被管理。 实现原理 将连接句柄存入channel中,由于缓存channel的特性,获取连接时如果池中有连接,将直接返回,如果池中没有连接,将阻塞或者新建连接(没超过最大限制的情况下)。 由于面向接口编程,所有创建连接的逻辑是不清楚的,这里需要传入一个函数,该函数返回一个io.