Go Commons Pool 是用 Go 实现的对象池,直接翻译自 Java 版的 Apache Commons Pool.
示例代码:
//use create func pool := NewObjectPoolWithDefaultConfig(NewPooledObjectFactorySimple( func() (interface{}, error) { return &MyPoolObject{}, nil })) obj, _ := pool.BorrowObject() pool.ReturnObject(obj) //use custom Object factory type MyObjectFactory struct { } func (this *MyObjectFactory) MakeObject() (*PooledObject, error) { return NewPooledObject(&MyPoolObject{}), nil } func (this *MyObjectFactory) DestroyObject(object *PooledObject) error { //do destroy return nil } func (this *MyObjectFactory) ValidateObject(object *PooledObject) bool { //do validate return true } func (this *MyObjectFactory) ActivateObject(object *PooledObject) error { //do activate return nil } func (this *MyObjectFactory) PassivateObject(object *PooledObject) error { //do passivate return nil } pool := NewObjectPoolWithDefaultConfig(new(MyObjectFactory)) obj, _ := pool.BorrowObject() pool.ReturnObject(obj)
github.com/jolestar/go-commons-pool 测试代码 package main import ( "github.com/jolestar/go-commons-pool" "fmt" ) type MyPoolObject struct { Name string } type MyObjectFactory struct { }
Table of Contents Introduction How to use Additional features Inside the Apache Tomcat Container Standalone JMX Attributes JNDI Factory and Type System Properties Common Attributes Tomcat JDBC Enhance
一、Commons BeanUtilshttp://jakarta.apache.org/commons/beanutils/index.html说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是Bean Copy,也就是copy bean的属性。如果做分层
在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题: 减少连接创建时间 不论是与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销都是可以避免的。 简化了编程模式 当使用连接池时,具体的操作都是统一的不用关心初始化等各项关心点。 受控的资源使用 如果用户不使用连接池,而是每当需要时创建一个新的连接,那么用户的应用程序的资
the commons project already has more than three dozen components; some have been developed from scratch, and other have been pulled out of bigger projects under jarkata. the components that are part o
一、go协程池(goroutine) 注意: Go语言中的goroutine虽然相对于系统线程来说比较轻量级(初始栈大小仅2KB),但是在高并发量下的goroutine频繁创建和销毁对于性能损耗以及GC来说压力也不小 package main import ( "errors" "fmt" "log" "sync" "sync/atomic" "time" ) var ( //