Как подать сигнал горутину, чтобы он остановился?

Я пытаюсь остановить рутину, но не могу найти способ добиться этого. Я думал использовать 2-й канал, но если я прочитаю с него, он заблокирует это, не так ли? Вот код, который, я надеюсь, объясняет, что я пытаюсь сделать.

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")
}

Играть в эту вещь

Ответы на вопрос(1)

Ваш ответ на вопрос