Каналы (Channels)|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"` без использования какой-либо
# другой синхронизации.