我想知道退出程序之前等待go例程完成的正确方法是什么。阅读其他答案,看来bool chan可以解决问题,就像在Playground链接中一样
func do_stuff(done chan bool) { fmt.Println("Doing stuff") done <- true } func main() { fmt.Println("Main") done := make(chan bool) go do_stuff(done) <-done //<-done }
我在这里有两个问题:
为什么<-完成的作品完全可以?
如果我取消最后一行的注释会怎样?我有一个死锁错误。这是因为通道为空,并且没有其他函数向其发送值吗?
为何<- done一切正常?
<- done
如果我取消最后一行的注释会怎样?
值得一提的是,如果您的内存非常有限,则可以使用done := make(chan struct{})和done <- struct{}{},struct{}以确保使用0个内存。
done := make(chan struct{})
done <- struct{}{}
struct{}