9fans.net/go@v0.0.7/cmd/acme/internal/bufs/buf.go (about) 1 package bufs 2 3 import ( 4 "sync" 5 6 "9fans.net/go/cmd/acme/internal/runes" 7 ) 8 9 const Len = 32 * 1024 10 const RuneLen = Len / runes.RuneSize 11 12 var runesPool = sync.Pool{ 13 New: func() interface{} { return make([]rune, RuneLen) }, 14 } 15 16 func AllocRunes() []rune { 17 return runesPool.Get().([]rune) 18 } 19 20 func FreeRunes(buf []rune) { 21 if cap(buf) != RuneLen { 22 panic("FreeRunes: wrong size") 23 } 24 runesPool.Put(buf[:RuneLen]) 25 } 26 27 var bytesPool = sync.Pool{ 28 New: func() interface{} { return make([]byte, Len) }, 29 } 30 31 func AllocBytes() []byte { 32 return bytesPool.Get().([]byte) 33 } 34 35 func FreeBytes(buf []byte) { 36 if cap(buf) != Len { 37 panic("FreeRunes: wrong size") 38 } 39 bytesPool.Put(buf[:Len]) 40 }