考慮下面的代碼作爲一個簡化的例子:垃圾收集器會收集永不會繼續的Go例程嗎?
func printer(c <-chan int) {
for {
fmt.Print(<-c)
}
}
func provide() {
c := make(chan int)
go printer(c)
for i := 1; i <= 100; i++ {
c <- i
}
}
功能provide
創建一個去例程printer
,打印provide
生成數據。
我的問題是,在provide
返回和printer
開始阻塞空信道後會發生什麼。去日常事務是否會泄漏,因爲沒有進一步提及c
或者垃圾回收器是否會捕獲這種情況並處理去程序和c
?
如果確實是這種代碼導致內存泄漏的情況,我可以採取什麼策略來防止發生內存泄漏?
謝謝。顯然,我的「解決方案」並不是很好。 – fuz
在打印機goroutine中使用range子句將避免ok檢查 - >對於v:= range c {fmt.Println(v)} – Philipp
@Philipp:是的,你說得對。 – zzzz