DP
Size: a a a
DP
DP
DP
zl
zl
func (c *Bytes) Encode(src, key []byte) []byte {
buffer := c.pool.Get().(*bytes.Buffer)
defer func() {
buffer.Reset()
c.pool.Put(buffer)
} ()
hex.NewEncoder(buffer).Write(xor(src, key))
return buffer.Bytes()
}RS
zl
func (b *Buffer) Bytes() []byte { return b.buf[b.off:] }RS
func (c *Bytes) Encode(src, key []byte) []byte {
buffer := c.pool.Get().(*bytes.Buffer)
defer func() {
buffer.Reset()
c.pool.Put(buffer)
} ()
hex.NewEncoder(buffer).Write(xor(src, key))
return buffer.Bytes()
}sync.PoolRS
func (c *Bytes) Encode(src, key []byte) []byte {
buffer := c.pool.Get().(*bytes.Buffer)
defer func() {
buffer.Reset()
c.pool.Put(buffer)
} ()
hex.NewEncoder(buffer).Write(xor(src, key))
return buffer.Bytes()
}buffer.Bytes вернёт слайс буфера, в зависимости от того что с ним дальше происходит это может быть опасно (ключевое слово: aliasing)zl
RS
sync.Pool для того, чтобы не allocate’ить заново большие буфера а переиспользовать их. Если мы за alias’им слайс буфера и передадим кому-то кто про сам буфер ничего не знает - это может быть опасноzl
string(buffer.Bytes())RS
string(buffer.Bytes())RS
string(buffer.Bytes())zl
RS
zl
RS
sync.Poolzl