Mam tento priklad:
package main
import (
"fmt"
"time"
)
func greet(c chan string) {
println("blocking")
val, ok := <- c
println(val)
println(ok)
println("waiting")
val2, ok2 := <- c
println(val2)
println(ok2)
println("ending")
}
func main() {
c := make(chan string)
go greet(c)
time.Sleep(5000 * time.Millisecond)
c <- "John"
c <- "Jim"
}
vystup je
blocking
John
true
waiting
Jim
true
ending
Takze sa spusti go rutina greet(), prvy <- c je blokujuci, poslem c <- John, odblokuje sa to a vypise, poslem druhy krat c <- Jim, odblokuje sa to tiez a skonci sa program.
Problem je, ze bez toho time.Sleep(5000 * time.Millisecond) po go greet(c) sa vypise len John ale nie Jim.
Preco to tak je?
Ved greet ma v sebe dva blokujuce <- c, preco ked tam nedam ten time.Sleep, tak to vypise len John-a a skonci sa program a Jim sa akokeby odignoruje?