Source File
pool.go
Belonging Package
github.com/gookit/goutil/byteutil
package byteutil// ChanPool struct//// Usage://// bp := strutil.NewByteChanPool(500, 1024, 1024)// buf:=bp.Get()// defer bp.Put(buf)// // use buf do something ...//// refer https://www.flysnow.org/2020/08/21/golang-chan-byte-pool.html// from https://github.com/minio/minio/blob/master/internal/bpool/bpool.gotype ChanPool struct {c chan []bytew int // init byte widthwcap int // set byte cap}// NewChanPool instancefunc ( int, int, int) *ChanPool {return &ChanPool{c: make(chan []byte, ),w: ,wcap: ,}}// Get gets a []byte from the BytePool, or creates a new one if none are// available in the pool.func ( *ChanPool) () ( []byte) {select {case = <-.c: // reuse existing bufferdefault:// create new bufferif .wcap > 0 {= make([]byte, .w, .wcap)} else {= make([]byte, .w)}}return}// Put returns the given Buffer to the BytePool.func ( *ChanPool) ( []byte) {select {case .c <- :// buffer went back into pooldefault:// buffer didn't go back into pool, just discard}}// Width returns the width of the byte arrays in this pool.func ( *ChanPool) () ( int) {return .w}// WidthCap returns the cap width of the byte arrays in this pool.func ( *ChanPool) () ( int) {return .wcap}
![]() |
The pages are generated with Golds v0.8.4. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |