Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jackc/puddle
Generic resource pool for Go
https://github.com/jackc/puddle
connection pool resource
Last synced: 13 days ago
JSON representation
Generic resource pool for Go
- Host: GitHub
- URL: https://github.com/jackc/puddle
- Owner: jackc
- License: mit
- Created: 2018-12-23T05:12:12.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-10T11:12:45.000Z (2 months ago)
- Last Synced: 2024-10-29T20:31:59.632Z (14 days ago)
- Topics: connection, pool, resource
- Language: Go
- Size: 135 KB
- Stars: 299
- Watchers: 8
- Forks: 25
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[![Go Reference](https://pkg.go.dev/badge/github.com/jackc/puddle/v2.svg)](https://pkg.go.dev/github.com/jackc/puddle/v2)
![Build Status](https://github.com/jackc/puddle/actions/workflows/ci.yml/badge.svg)# 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 and golang.org/x/sync
* High performance
* 100% test coverage of reachable code## Example Usage
```go
package mainimport (
"context"
"log"
"net""github.com/jackc/puddle/v2"
)func main() {
constructor := func(context.Context) (net.Conn, error) {
return net.Dial("tcp", "127.0.0.1:8080")
}
destructor := func(value net.Conn) {
value.Close()
}
maxPoolSize := int32(10)pool, err := puddle.NewPool(&puddle.Config[net.Conn]{Constructor: constructor, Destructor: destructor, MaxSize: maxPoolSize})
if err != nil {
log.Fatal(err)
}// Acquire resource from the pool.
res, err := pool.Acquire(context.Background())
if err != nil {
log.Fatal(err)
}// Use resource.
_, err = res.Value().Write([]byte{1})
if err != nil {
log.Fatal(err)
}// Release when done.
res.Release()
}
```## Status
Puddle is stable and feature complete.
* Bug reports and fixes are welcome.
* New features will usually not be accepted if they can be feasibly implemented in a wrapper.
* Performance optimizations will usually not be accepted unless the performance issue rises to the level of a bug.## Supported Go Versions
puddle supports the same versions of Go that are supported by the Go project. For [Go](https://golang.org/doc/devel/release.html#policy) that is the two most recent major releases. This means puddle supports Go 1.19 and higher.
## License
MIT