Channels

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