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 }