Avatar ·

如何在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) // 如何停止