/
githubmirror
/
ydb-go-sdk
Обзор
Документация
Войти
/
githubmirror
/
ydb-go-sdk
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
internal/xsync/pool.go
54 строки
700 B
Aleksey Myasnikov
moved internal/allocator.Pool into internal/xsync package
09 июл 2024, 21:16
09 июл 2024, 21:16
38f65b1
Код
Авторство
О чём код?
package xsync import "sync" // pool interface uses for testing with mock or standard sync.Pool for runtime type pool interface { Get() (v any) Put(v any) } type Pool[T any] struct { p pool New func() *T once sync.Once } func (p *Pool[T]) init() { p.once.Do(func() { if p.p == nil { p.p = &sync.Pool{} } }) } func (p *Pool[T]) GetOrNew() *T { p.init() if v := p.p.Get(); v != nil { return v.(*T) //nolint:forcetypeassert } if p.New != nil { return p.New() } return new(T) } func (p *Pool[T]) GetOrNil() *T { p.init() if v := p.p.Get(); v != nil { return v.(*T) //nolint:forcetypeassert } return nil } func (p *Pool[T]) Put(t *T) { p.init() p.p.Put(t) }