Go podle Příkladů: Kanály

Kanály jsou potrubí které propojuje souběžné gorutiny. Do kanálů můžete posílat hodnoty z jedné gorutiny a přijímat tyto hodnoty v jiné gorutině.

package main
import "fmt"
func main() {

Nový kanál vytvoříte s pomocí make(chan typ-hodnot). Kanály mají typy podle hodnot, jaké doručují.

    messages := make(chan string)

Hodnotu do kanálu pošlete pomocí zápisu kanál <-. Zde posíláme z nové gorutiny hodnotu "ping"do kanálu messages který jsme vytvořili výše.

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

Zápis <-kanál přijímá hodnotu z kanálu. Zde dostaneme zprávu "ping" kterou jsme poslali výše a vypíšeme ji.

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

Když náš program zapneme zpráva "ping" je úspěšně předaná z jedné gorutiny do jiné pomocí našeho kanálu.

$ go run channels.go 
ping

Běžné poslání a přijímání blokuje, dokud oba odesílající i příjemce nejsou připravení. Toto chování způsobila že jsme čekali na konci našeho programu na zprávu"ping" bez nutnosti použít nějakou jinou synchronizaci.

Další příklad: Kanály s vyrovnávací pamětí.