如何在Go中正确停止goroutine?后台任务完成的问题
大家好!我是一名Go开发新手,遇到了goroutine管理的问题。我正在编写一个小型服务,定期检查外部API状态并更新本地缓存。为此,我启动了一个带有无限循环和time.Sleep的后台goroutine。
问题在于,当程序终止时(例如通过Ctrl+C)或需要重启goroutine时,我无法正确停止它。如果我直接结束main,goroutine会继续挂起或引发panic。我尝试使用全局标志`var running bool`并在循环中检查它,但这不会立即生效,有时goroutine会在I/O操作上阻塞。
以下是我的代码示例:
```go
package main
import (
"fmt"
"time"
)
func worker() {
for {
fmt.Println("Working...")
// 这里可能有对API的长时间请求
time.Sleep(2 * time.Second)
}
}
func main() {
go worker()
time.Sleep(5 * time.Second)
// 如何停止