feat 初始化
This commit is contained in:
33
utils/pool_object.go
Normal file
33
utils/pool_object.go
Normal file
@@ -0,0 +1,33 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user