Вопрос: Как правильно завершать горутину по сигналу 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)
}
```