Каналите са тръбите, които свързват едновременно работещи гозадачи. Можете да изпращате стойности през канали от една гозадача и да ги получавате в друга гозадача.
import "fmt"
func main() {
Създайте нов канал с make(chan видСтойност).
Видът на канала е видът, който каналът пренася.
messages := make(chan string)
Изпратете стойност по канал, като напишете
имеНаКанал <-. Тук пращаме "пинг" по
канала messages, който създадохме горе, от нова
гозадача.
go func() { messages <- "пинг" }()
Като напишем <-channel означва, че получаваме
стойност по канала. Тук ще получим съобщението
"пинг", което изпратихме горе и ще го изведем на
екрана.
msg := <-messages
fmt.Println(msg)
}
Когато пуснем програмата, съобщението"пинг" бива
предадено успешно от една задача към друга през канала
ни.
$ go run channels.go
пинг
По подразбиране изпращанията и получаванията блокират
всяка друга работа в програмата ни, докато подателят и
получателят станат готови. Това свойство ни позволи да
чакаме в края на програмата ни съобщението "пинг" без
никакво друго съгласуване1.
Следващ пример: Складиране в канали.