github.com/ssetin/penguincast@v0.2.0/src/server/pool.go (about) 1 // Package iceserver - icecast streaming server 2 package iceserver 3 4 import ( 5 "errors" 6 "sync" 7 ) 8 9 // PoolManager ... 10 type PoolManager struct { 11 pages map[int]*sync.Pool 12 } 13 14 // Init ... 15 func (p *PoolManager) Init(size int) *sync.Pool { 16 17 if p.pages == nil { 18 p.pages = make(map[int]*sync.Pool) 19 } 20 21 if pool, ok := p.pages[size]; ok { 22 return pool 23 } 24 25 p.pages[size] = &sync.Pool{ 26 New: func() interface{} { 27 return make([]byte, size) 28 }, 29 } 30 31 return p.pages[size] 32 } 33 34 // GetPool ... 35 func (p *PoolManager) GetPool(size int) (*sync.Pool, error) { 36 if pool, ok := p.pages[size]; ok { 37 return pool, nil 38 } 39 return nil, errors.New("No pool according to that size. You have to initialize it") 40 }