"在Go语言中,无法直接停止一个goroutine。但是,可以使用通道来传递信号并控制goroutine的执行。\n\n下面是使用通道来停止一个goroutine的示例:\n\ngo\npackage main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tstopCh := make(chan struct{}) // 创建一个停止通道\n\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-stopCh:\n\t\t\t\tfmt.Println(\"goroutine stopped\")\n\t\t\t\treturn\n\t\t\tdefault:\n\t\t\t\tfmt.Println(\"goroutine running\")\n\t\t\t\ttime.Sleep(time.Second)\n\t\t\t}\n\t\t}\n\t}()\n\n\ttime.Sleep(3 * time.Second)\n\tfmt.Println(\"sending stop signal\")\n\tstopCh <- struct{}{} // 发送停止信号\n\ttime.Sleep(2 * time.Second)\n}\n\n\n在上面的示例中,我们创建了一个stopCh通道来停止goroutine。在goroutine中,我们使用select语句来监听stopCh通道的接收操作。当接收到停止信号时,goroutine会打印停止信息并返回,从而停止执行。\n\n在主函数中,我们先等待3秒,然后发送停止信号到stopCh通道。最后,我们再等待2秒,以确保goroutine已经停止。\n\n运行上面的示例,你将会看到如下输出:\n\n\ngoroutine running\ngoroutine running\ngoroutine running\nsending stop signal\ngoroutine stopped\n\n\n从输出可以看出,当发送停止信号后,goroutine会在接收到信号后停止执行。"


原文地址: https://www.cveoy.top/t/topic/p0yb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录