首页 > 解决方案 > 停止计时器会结束 goroutine 吗?

问题描述

像下面这样通过停止计时器停止的简单 goroutine 是否变得干净?还是留在内存中直到程序结束?

go func() {
    <-timer1.C //Will stop before firing.
    fmt.Println("Timer 1 fired")
}()

标签: gomemoryconcurrencytimergoroutine

解决方案


如果通道关闭,Go 例程将退出。如果通道保持打开但没有发送任何内容,那么 Go 例程将永远“挂起”,直到程序退出。

如果timer1是 a time.Timer,则Stop不会关闭通道,如文档中所述:https ://pkg.go.dev/time#Timer.Stop


推荐阅读