Go в примери: Канали (chan)

Каналите са тръбите, които свързват едновременно работещи гозадачи. Можете да изпращате стойности през канали от една гозадача и да ги получавате в друга гозадача.

package main
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.


  1. synchronization – съгласуване

Следващ пример: .