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?