|
Zavírání kanálu indikuje že do něho nebude poslána žádná další zpráva. To se hodí pro oznámení o ukončení komunikace příjemcům kanálů. |
|
package main
|
|
import "fmt"
|
|
|
V tomto příkladu použijeme kanál |
func main() {
jobs := make(chan int, 5)
done := make(chan bool)
|
|
Tady je pracovní gorutina. Bude opakovaně přijímat
z |
go func() {
for {
j, more := <-jobs
if more {
fmt.Println("přijal práci", j)
} else {
fmt.Println("přijal všechny práce")
done <- true
return
}
}
}()
|
|
Toto pošle 3 práce pracovníkovi přes kanál |
for j := 1; j <= 3; j++ {
jobs <- j
fmt.Println("poslal práci", j)
}
close(jobs)
fmt.Println("poslal všechny práce")
|
|
Zde čekáme na pracovníka s použitím synchronizace kterou jsme viděli dříve. |
<-done
}
|
$ go run closing-channels.go
poslal práci 1
poslal práci 2
poslal práci 3
poslal všechny práce
přijal práci 1
přijal práci 2
přijal práci 3
přijal všechny práce
|
|
|
Myšlenka zavírání kanálů nás přirozene vede k
našemu dalšímu příkladu: iterování kanálů pomocí
|
Další příklad: Iterování kanálů pomocí range.