Вопрос: Как правильно завершать горутину по сигналу done (context-like pattern)?

Go Junior Без компании
Вопрос: Как правильно завершать горутину по сигналу done (context-like pattern)?
Ответы
Частый паттерн: канал done или context.Context. Горутина в select слушает done и рабочий канал. ```go package main import ( "fmt" "time" ) func worker(done <-chan struct{}, jobs <-chan int) { for { select { case <-done: return case j, ok := <-jobs: if !ok { return } fmt.Println("job", j) } } } func main() { done := make(chan struct{}) jobs := make(chan int) go worker(done, jobs) jobs <- 1 close(done) time.Sleep(10 * time.Millisecond) } ```