РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
856 of 1593 menu

Метод sync.Pool.Put

Метод Put структуры sync.Pool возвращает объект обратно в пул. В качестве единственного параметра он принимает объект, который необходимо вернуть. Возвращаемое значение отсутствует. После вызова Put объект становится доступным для повторного использования через метод Get.

Синтаксис

pool.Put(obj)

Пример

Рассмотрим базовый пример использования пула с возвратом объекта:

package main import ( "fmt" "sync" ) func main() { pool := &sync.Pool{ New: func() interface{} { return "default value" }, } obj := pool.Get() fmt.Println(obj) pool.Put("custom value") obj = pool.Get() fmt.Println(obj) }

Результат выполнения кода:

"default value" "custom value"

Пример

Покажем, как Put позволяет переиспользовать объекты с состоянием:

package main import ( "fmt" "sync" ) func main() { pool := &sync.Pool{ New: func() interface{} { return make([]byte, 1024) }, } buf := pool.Get().([]byte) copy(buf, "abcde") fmt.Println(string(buf[:5])) pool.Put(buf) newBuf := pool.Get().([]byte) fmt.Println(string(newBuf[:5])) }

Результат выполнения кода:

"abcde" "abcde"

Пример

Важно сбрасывать состояние объекта перед возвратом в пул:

package main import ( "fmt" "sync" ) func main() { pool := &sync.Pool{ New: func() interface{} { return make([]string, 0, 10) }, } slice := pool.Get().([]string) slice = append(slice, "a", "b", "c") fmt.Println(slice) slice = slice[:0] pool.Put(slice) newSlice := pool.Get().([]string) fmt.Println(newSlice) }

Результат выполнения кода:

[a b c] []

Смотрите также

  • структуру sync.Pool,
    которая предоставляет пул временных объектов
  • метод sync.Pool.Get,
    который извлекает объект из пула
  • блокировку sync.Mutex,
    которая обеспечивает взаимное исключение
  • механизм горутин,
    которые могут безопасно использовать пулы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить