Go в примерах: Каналы (Channels)

Каналы это способ связи паралелльных горутин между собой. Вы можете послать сообщение в канал из одной горутины и получить его в другой.

package main
import "fmt"
func main() {

Создаем новый канал - make(chan val-type). Каналы типизируются в зависимости от значений, которые они передают.

    messages := make(chan string)

Отправьте значение в канал, используя channel <-. Здесь мы отправляем "ping" в канал messages, который мы сделали выше, из новой горутины.

    go func() { messages <- "ping" }()

Синтаксис <-channel читает из канала. Здесь мы получим сообщение "ping", которое мы отправили выше, и распечатаем его.

    msg := <-messages
    fmt.Println(msg)
}

Когда мы запускаем программу, сообщение "ping" успешно передается из одной горутины в другую по нашему каналу.

$ go run channels.go 
ping

По-умолчанию, отправление и получение блокируются, пока оба отправителя и получателя готовы. Это свойство позволило нам ждать в конце нашей программы сообщения "ping" без использования какой-либо другой синхронизации.

Следующий пример: Буферизированный канал (Channel Buffering).