micro/util/xpool/pool.go

37 lines
523 B
Go
Raw Normal View History

package pool
import (
"bytes"
"sync"
)
type Pool[T any] struct {
p *sync.Pool
}
func NewPool[T any](fn func() T) Pool[T] {
return Pool[T]{
p: &sync.Pool{
New: func() interface{} {
return fn()
},
},
}
}
func (p Pool[T]) Get() T {
return p.p.Get().(T)
}
func (p Pool[T]) Put(t T) {
p.p.Put(t)
}
func NewBytePool(size int) Pool[T] {
return NewPool(func() []byte { return make([]byte, size) })
}
func NewBytesPool() Pool[T] {
return NewPool(func() *bytes.Buffer { return bytes.NewBuffer(nil) })
}