Go на примерах: Каналы

Каналы — это трубы, соединяющие конкурентные goroutine. Ты можешь отправлять значения в каналы из одной goroutine и получать эти значения в другой.

package main
import "fmt"
func main() {

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

    messages := make(chan string)

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

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

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

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

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

$ go run channels.go
ping

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

Далее: .