Запутался насчет блокировки каналов - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть этот блок кода, который должен ждать 10 секунд, прежде чем программа закроется, но он работает только в том случае, если я добавлю что-нибудь для печати после него.Это почему?Я хочу, чтобы он подождал 10 секунд без необходимости раскомментировать этот оператор печати.

func main() {

  forever := make(chan bool)
  go func() {
    fmt.Println("why")
    time.Sleep(10*time.Second)
    //fmt.Println("here")
    forever <- false
  }()
  fmt.Println("forever")
  <- forever

}

Это также работает:

func main() {

  forever := make(chan bool)
  go func() {
    fmt.Println("why")
    time.Sleep(10*time.Second)
    forever <- false
  }()
  fmt.Println(<- forever)

}

Следующая программа не ждет 10 секунд при запуске на игровой площадке Go:

package main

import (
    "time"
)

func main() {
    forever := make(chan bool)
    go func() {
        time.Sleep(10 * time.Second)
        forever <- false
    }()
    <-forever
}

1 Ответ

0 голосов
/ 19 сентября 2018

Технически, это «особенность» детской площадки.Когда все заблокировано в ожидании времени на игровой площадке, время будет искусственно продвигаться до тех пор, пока все не разблокируется ... или решит, что вещи действительно заблокированы.См. Раздел «Время подделки» в статье Golang Playground .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...