Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Témata - tvojtatko

Stran: [1]
1
Vývoj / Nechápem tuto Go rutinu
« kdy: 20. 08. 2019, 11:06:51 »
Mam tento priklad:

Kód: [Vybrat]
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

Kód: [Vybrat]
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?

Stran: [1]