一尘不染

如何停止一个goroutine

go

我有一个调用方法的 goroutine,并在通道上传递返回值:

ch := make(chan int, 100)
go func(){
    for {
        ch <- do_stuff()
    }
}()

我如何停止这样的 goroutine?


阅读 167

收藏
2021-11-18

共1个答案

一尘不染

通常,您向 goroutine 传递一个(可能是单独的)信号通道。当您希望 goroutine 停止时,该信号通道用于将值推入。goroutine 定期轮询该通道。一旦检测到信号,它就会退出。

quit := make(chan bool)
go func() {
    for {
        select {
        case <- quit:
            return
        default:
            // Do other stuff
        }
    }
}()

// Do stuff

// Quit goroutine
quit <- true
2021-11-18