/
pool.go
62 lines (53 loc) · 960 Bytes
/
pool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package gosql
import (
"bytes"
"strings"
"sync"
)
func CreatePool(f func() interface{}) func() *sync.Pool {
var once sync.Once
var pool *sync.Pool
return func() *sync.Pool {
once.Do(func() {
pool = &sync.Pool{New: f}
})
return pool
}
}
var (
GetBufferPool = CreatePool(func() interface{} {
var b bytes.Buffer
return &b
})
)
func AcquireBuffer() *bytes.Buffer {
if b, ok := GetBufferPool().Get().(*bytes.Buffer); ok {
return b
}
var b bytes.Buffer
return &b
}
func ReleaseBuffer(b *bytes.Buffer) {
if nil == b {
return
}
b.Reset()
GetBufferPool().Put(b)
}
var (
GetStringsBuilderPool = CreatePool(func() interface{} {
var b bytes.Buffer
return &b
})
)
func AcquireStringsBuilder() *strings.Builder {
if b, ok := GetStringsBuilderPool().Get().(*strings.Builder); ok {
return b
}
var b strings.Builder
return &b
}
func ReleaseStringsBuilder(b *strings.Builder) {
b.Reset()
GetStringsBuilderPool().Put(b)
}