Como sinalizar para uma goroutine parar de correr?
Estou tentando interromper uma rotina de ir, mas não consigo encontrar uma maneira de conseguir isso. Eu estava pensando em usar um segundo canal, mas se eu ler a partir disso ele iria bloquear, não é? Aqui está um código que, espero, explica o que estou tentando fazer.
package main
import "fmt"
import "time"
func main() {
var tooLate bool
proCh := make(chan string)
go func() {
for {
fmt.Println("working")
//if is tooLate we stop/return it
if tooLate {
fmt.Println("stopped")
return
}
//processing some data and send the result on proCh
time.Sleep(2 * time.Second)
proCh <- "processed"
fmt.Println("done here")
}
}()
select {
case proc := <-proCh:
fmt.Println(proc)
case <-time.After(1 * time.Second):
// somehow send tooLate <- true
//so that we can stop the go routine running
fmt.Println("too late")
}
time.Sleep(4 * time.Second)
fmt.Println("finish\n")
}