Files
service-common/utils/pool_object.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
}