mirror of
https://github.com/fumiama/WireGold.git
synced 2026-06-06 00:10:25 +08:00
33 lines
645 B
Go
33 lines
645 B
Go
package helper
|
|
|
|
import (
|
|
"bytes"
|
|
"sync"
|
|
)
|
|
|
|
// https://github.com/Mrs4s/MiraiGo/blob/master/binary/pool.go
|
|
|
|
var bufferPool = sync.Pool{
|
|
New: func() interface{} {
|
|
return new(Writer)
|
|
},
|
|
}
|
|
|
|
// SelectWriter 从池中取出一个 Writer
|
|
func SelectWriter() *Writer {
|
|
// 因为 bufferPool 定义有 New 函数
|
|
// 所以 bufferPool.Get() 永不为 nil
|
|
// 不用判空
|
|
return bufferPool.Get().(*Writer)
|
|
}
|
|
|
|
// PutWriter 将 Writer 放回池中
|
|
func PutWriter(w *Writer) {
|
|
// See https://golang.org/issue/23199
|
|
const maxSize = 1 << 16
|
|
if (*bytes.Buffer)(w).Cap() < maxSize { // 对于大Buffer直接丢弃
|
|
w.Reset()
|
|
bufferPool.Put(w)
|
|
}
|
|
}
|