go 如何关闭一个协程 举例 go qidong()
时间: 2023-12-06 14:04:28 浏览: 169
qidong.rar_APP界面_android_android app源码_qidong1.1.3.apk
在 Golang 中,没有提供直接关闭一个协程的方法。但是,我们可以使用一些技巧来实现关闭协程的效果。
一种常用的方法是使用通道来控制协程的执行。我们可以在主协程中创建一个通道,然后把这个通道传递给子协程,子协程会在执行过程中不断地检查通道,一旦收到主协程发来的信号,就会退出协程。
以下是示例代码:
```go
package main
import (
"fmt"
"time"
)
func qidong(done chan bool) {
for {
select {
default:
fmt.Println("执行协程中...")
case <-done:
fmt.Println("协程收到关闭信号,退出")
return
}
}
}
func main() {
// 创建一个通道
done := make(chan bool)
// 启动协程
go qidong(done)
// 等待 2 秒,然后发送关闭信号
time.Sleep(2 * time.Second)
fmt.Println("发送关闭信号")
done <- true
// 等待 1 秒,观察协程是否被正常关闭
time.Sleep(1 * time.Second)
fmt.Println("main 函数退出")
}
```
在上面的示例代码中,我们创建了一个通道 `done`,并把它传递给协程函数 `qidong()`。在协程函数中,我们使用 `select` 语句监听通道 `done`,一旦收到关闭信号,就会退出协程。
在 `main()` 函数中,我们等待了 2 秒钟,然后发送一个关闭信号给协程。协程函数会在执行过程中不断地检查通道 `done`,一旦收到关闭信号,就会退出协程。在 `main()` 函数中,我们等待了 1 秒钟,观察协程是否被正常关闭。
阅读全文