Ответ
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. - Лучше не использовать для пулов с зависимостями (например, соединения с БД).