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.Pool
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()
}
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.Pool
zl