Приведи пример способов взаимодействия с каналами, кроме горутины

«Приведи пример способов взаимодействия с каналами, кроме горутины» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

// 1. Чтение/запись в основном потоке
ch := make(chan int)
ch <- 42 // запись
val := <-ch // чтение

// 2. Использование select для мультиплексирования
select {
case msg := <-ch1:
    fmt.Println(msg)
case ch2 <- 42:
    fmt.Println("sent")
default:
    fmt.Println("no activity")
}

// 3. Закрытие канала
close(ch)
val, ok := <-ch // ok=false если канал закрыт

// 4. Итерация по каналу
for v := range ch {
    fmt.Println(v)
}

// 5. Буферизированные каналы
bufCh := make(chan int, 10)
bufCh <- 1 // не блокируется пока буфер не заполнен