Go 对堵塞通道感到困惑吗

Go 对堵塞通道感到困惑吗,go,Go,我有一段代码,它应该在程序退出前等待10秒,但只有在我为它添加某种打印内容之后,它才能工作。为什么呢?我希望它等待10秒钟,而不必取消对print语句的注释 func main() { forever := make(chan bool) go func() { fmt.Println("why") time.Sleep(10*time.Second) //fmt.Println("here") forever <- false }() f

我有一段代码,它应该在程序退出前等待10秒,但只有在我为它添加某种打印内容之后,它才能工作。为什么呢?我希望它等待10秒钟,而不必取消对print语句的注释

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(){
永远:=制造(陈波)
go func(){
fmt.Println(“为什么”)
时间。睡眠(10*时间。秒)
//fmt.Println(“此处”)

永远从技术上讲,这是操场的一个“功能”。当所有东西都在操场上等待时间被阻塞时,时间会人为地向前推进,直到事情解除阻塞……或者它决定事情真的陷入僵局。请参阅中的“假时间”部分。

从技术上讲,这是一个“功能”在操场上,当所有的事情都被阻塞了,在操场上等待时间,时间会人为地前进,直到事情解除阻塞…或者它决定事情真的陷入僵局。参见“假装时间”.

中的部分,我无法重现您的问题。目前,此代码符合您的要求。我删除了打印语句。我看到它在终端中运行时等待,而不是在操场上等待。@squiggy这是突然结束的代码,这是等待10秒的代码我相当确定操场上有沙子盒装环境,因此它会限制执行时间。尝试等待一秒钟。从技术上讲,这是操场的一项“功能”。当所有东西都在操场上被阻塞时,时间会人为地提前,直到事情解除阻塞…或者它决定事情处于僵局。请参阅“假装时间”在游乐场文章中的部分,我无法重现您的问题。就目前情况而言,此代码符合您的要求。我删除了打印语句。我看到它在终端中运行时等待,而不是在游乐场上等待。@squiguy这是突然结束的代码,这是等待10秒的代码我相当确定游乐场nd有一个沙盒环境,所以它会限制执行时间。试着等待一秒钟。从技术上讲,这是操场的一个“功能”。当所有东西都在操场上等待时间被阻塞时,时间会人为地提前,直到事情解除阻塞…或者它决定事情处于僵局。请参阅操场文章中的“假装时间”部分
func main() {

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

}
package main

import (
    "time"
)

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