Ответ
ch := make(chan int) // небуферизированный канал
bufferedCh := make(chan string, 10) // буферизированный на 10 элементов
// Отправка данных
ch <- 42
bufferedCh <- "hello"
// Получение данных
value := <-ch
msg := <-bufferedCh
// Закрытие канала
close(ch)
// Проверка на закрытие
v, ok := <-ch // ok == false если канал закрыт
// Итерация по каналу
for item := range bufferedCh {
fmt.Println(item)
}
Основные моменты:
- Каналы создаются через
make() - Могут быть буферизированными и небуферизированными
- Операции отправки/получения блокирующие (для небуферизированных)
- Закрывать каналы должен отправитель
rangeработает до закрытия канала