Golang 通用连接池

时间:2022-05-05
本文章向大家介绍Golang 通用连接池,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

资源链接 https://github.com/silenceper/pool

pool

GoDoc

Golang 实现的连接池

功能:


连接池中连接类型为interface{},使得更加通用

链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题

使用channel处理池中的链接,高效

基本用法



//factory 创建连接的方法

factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") }



//close 关闭链接的方法

close := func(v interface{}) error { return v.(net.Conn).Close() }



//创建一个连接池: 初始化5,最大链接30

poolConfig := &pool.PoolConfig{

    InitialCap: 5,

    MaxCap:     30,

    Factory:    factory,

    Close:      close,

    //链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题

    IdleTimeout: 15 * time.Second,

}

p, err := pool.NewChannelPool(poolConfig)

if err != nil {

    fmt.Println("err=", err)

}



//从连接池中取得一个链接

v, err := p.Get()



//do something

//conn=v.(net.Conn)



//将链接放回连接池中

p.Put(v)



//释放连接池中的所有链接

p.Release()



//查看当前链接中的数量

current := p.Len()



注:



该连接池参考 https://github.com/fatih/pool 实现,改变以及增加原有的一些功能