Fedora 35 support was dropped, so we can update to a newer Go. Stable RHEL 8 and 9 and Fedora 36 ships Go 1.18, so let's switch to it. "//go:build" directives are now apparently enforced by go fmt, so that's why there were added. Also, all the github actions were adjusted to use Go 1.18. Signed-off-by: Ondřej Budai <ondrej@budai.cz> |
||
|---|---|---|
| .. | ||
| CHANGELOG.md | ||
| doc.go | ||
| LICENSE | ||
| nanotime_time.go | ||
| nanotime_unsafe.go | ||
| pool.go | ||
| README.md | ||
Puddle
Puddle is a tiny generic resource pool library for Go that uses the standard context library to signal cancellation of acquires. It is designed to contain the minimum functionality required for a resource pool. It can be used directly or it can be used as the base for a domain specific resource pool. For example, a database connection pool may use puddle internally and implement health checks and keep-alive behavior without needing to implement any concurrent code of its own.
Features
- Acquire cancellation via context standard library
- Statistics API for monitoring pool pressure
- No dependencies outside of standard library
- High performance
- 100% test coverage
Example Usage
constructor := func(context.Context) (interface{}, error) {
return net.Dial("tcp", "127.0.0.1:8080")
}
destructor := func(value interface{}) {
value.(net.Conn).Close()
}
maxPoolSize := 10
pool := puddle.NewPool(constructor, destructor, maxPoolSize)
// Acquire resource from the pool.
res, err := pool.Acquire(context.Background())
if err != nil {
// ...
}
// Use resource.
_, err = res.Value().(net.Conn).Write([]byte{1})
if err != nil {
// ...
}
// Release when done.
res.Release()
Status
Puddle v1 is complete. No changes are planned.
- Bug reports and fixes are welcome.
- New features will not be accepted if they can be feasibly implemented in a wrapper.
- Performance optimizations will not be accepted unless the performance issue rises to the level of a bug.
License
MIT