34 lines
414 B
Go
34 lines
414 B
Go
package utils
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type ObjectPool[T any] struct {
|
|
pool sync.Pool
|
|
}
|
|
|
|
func NewObjectPool[T any]() *ObjectPool[T] {
|
|
return &ObjectPool[T]{
|
|
pool: sync.Pool{
|
|
New: func() any {
|
|
return new(T)
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (p *ObjectPool[T]) Get() *T {
|
|
return p.pool.Get().(*T)
|
|
}
|
|
|
|
func (p *ObjectPool[T]) Put(obj *T) {
|
|
*obj = zero[T]()
|
|
p.pool.Put(obj)
|
|
}
|
|
|
|
func zero[T any]() T {
|
|
var z T
|
|
return z
|
|
}
|