我想知道在退出程序之前等待完成程序的正確方法是什麼。閱讀似乎一個布爾陳會做的伎倆一些其他的答案,如Playground link等待完成程序的正確方法
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'工作,因爲這正是渠道做:)(見https://golang.org/ref/spec#Receive_operator和https: //golang.org/ref/spec#Send_statements瞭解詳情)。你對第二行如何取消註釋會導致僵局是正確的。沒有任何發送到「完成」,Go認識到,如果它等待(即沒有任何等待網絡呼叫),甚至沒有*可以*。 – twotwotwo 2014-09-21 00:27:24