【发布时间】:2021-09-18 05:29:39
【问题描述】:
考虑以下代码:
go func() {
for now := range time.Tick(time.Minute) {
fmt.Println(now, statusUpdate())
}
}()
我需要 for 循环永远运行并且永远不需要停止它。 这会导致内存泄漏吗?
我知道如果我需要打破 for 循环,它会导致内存泄漏。但是如果我不需要打破 for 循环呢?
医生说
虽然 Tick 对于不需要关闭 Ticker 的客户端很有用,但请注意,如果没有办法将其关闭,则垃圾收集器无法恢复底层 Ticker;它“泄漏”了。
我只是想把它做好。
【问题讨论】:
-
goroutine会一直运行,不会有内存泄漏
-
另见 staticcheck 的 SA1015。
-
永远不会超出范围的东西无论如何都不会有资格进行 GC,因此它在逻辑上不会泄漏。
-
当 go 例程发生恐慌时,这完全可能超出范围,尽管程序将立即以退出状态 2 终止。
标签: go