Ответ
sync.Pool
— это пул объектов для повторного использования, уменьшающий нагрузку на сборщик мусора.
-
Принцип работы:
Get()
— возвращает объект из пула (или создаёт новый, если пуст).Put()
— возвращает объект в пул для повторного использования.- Объекты в пуле могут быть удалены сборщиком мусора в любой момент.
-
Пример:
var pool = sync.Pool{ New: func() any { return new(bytes.Buffer) }, } buf := pool.Get().(*bytes.Buffer) buf.WriteString("hello") pool.Put(buf)
-
Особенности:
- Подходит для объектов с дорогой инициализацией.
- Не гарантирует сохранность объектов между
Put
иGet
. - Лучше не использовать для пулов с зависимостями (например, соединения с БД).