gitee.com/quant1x/gox@v1.21.2/pool/README_ZH_CN.md (about) 1 # pool 2 [![PkgGoDev](https://pkg.go.dev/badge/github.com/silenceper/pool)](https://pkg.go.dev/github.com/silenceper/pool) 3 [![Go Report Card](https://goreportcard.com/badge/github.com/silenceper/pool)](https://goreportcard.com/report/github.com/silenceper/pool) 4 5 Golang 实现的连接池 6 7 8 ## 功能: 9 10 - 连接池中连接类型为`interface{}`,使得更加通用 11 - 连接的最大空闲时间,超时的连接将关闭丢弃,可避免空闲时连接自动失效问题 12 - 支持用户设定 ping 方法,检查连接的连通性,无效的连接将丢弃 13 - 使用channel处理池中的连接,高效 14 15 ## 基本用法 16 17 ```go 18 19 //factory 创建连接的方法 20 factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") } 21 22 //close 关闭连接的方法 23 close := func(v interface{}) error { return v.(net.Conn).Close() } 24 25 //ping 检测连接的方法 26 //ping := func(v interface{}) error { return nil } 27 28 //创建一个连接池: 初始化5,最大空闲连接是20,最大并发连接30 29 poolConfig := &pool.Config{ 30 InitialCap: 5,//资源池初始连接数 31 MaxIdle: 20,//最大空闲连接数 32 MaxCap: 30,//最大并发连接数 33 Factory: factory, 34 Close: close, 35 //Ping: ping, 36 //连接最大空闲时间,超过该时间的连接 将会关闭,可避免空闲时连接EOF,自动失效的问题 37 IdleTimeout: 15 * time.Second, 38 } 39 p, err := pool.NewChannelPool(poolConfig) 40 if err != nil { 41 fmt.Println("err=", err) 42 } 43 44 //从连接池中取得一个连接 45 v, err := p.Get() 46 47 //do something 48 //conn=v.(net.Conn) 49 50 //将连接放回连接池中 51 p.Put(v) 52 53 //释放连接池中的所有连接 54 p.Release() 55 56 //查看当前连接中的数量 57 current := p.Len() 58 59 60 ``` 61 62 63 #### 注: 64 该连接池参考 [https://github.com/fatih/pool](https://github.com/fatih/pool) 实现,改变以及增加原有的一些功能。 65 66 67 ## License 68 69 The MIT License (MIT) - see LICENSE for more details