Буферизованный канал — это канал в Go, который имеет определённую ёмкость и может хранить несколько значений без необходимости в немедленном получателе. Это отличается от небуферизованных каналов, которые требуют синхронного взаимодействия между отправителем и получателем.
Буферизованные каналы создаются с помощью функции make с аргументом ёмкости:
ch := make(chan Type, capacity)
Где capacity указывает максимальное количество значений, которые может содержать канал.
func main() {
// Буферизованный канал с ёмкостью 1
ch1 := make(chan int, 1)
ch1 <- 1 // Не блокирует - значение сохранено в буфер
// Небуферизованный канал
ch2 := make(chan int)
ch2 <- 1 // Блокирует - нет готового получателя и нет буфера
}
Используй буферизованные каналы, когда тебе нужно:
Всегда правильно закрывай буферизованные каналы и убедись, что получатели вычитывают все буферизованные значения, чтобы избежать утечек горутин и дедлоков.
Unbuffered channel немедленно заблокирует sender, если нет готовой goroutine для получения значения, тогда как buffered channel блокируется только после полного заполнения своей ёмкости.
Новый — ещё не проверен сообществом
Вы