Код IT
← Каталог

Асинхронность и горутины — 1. Границы ответственности — где запускать горутину?

Фрагмент из «Асинхронность и горутины»: 1. Границы ответственности — где запускать горутину?.

Go main.go
type AnalyticsService struct {
    queue chan *http.Request
    done  chan struct{}
}

func (s *AnalyticsService) Start() {
    for i := 0; i < 4; i++ {
        go s.worker()
    }
}

func (s *AnalyticsService) Enqueue(r *http.Request) {
    select {
    case s.queue <- r:
    default:
        // очередь переполнена — отбрасываем или логируем
    }
}

func (s *AnalyticsService) Stop() {
    close(s.queue)
    <-s.done
}
type AnalyticsService struct {
    queue chan *http.Request
    done  chan struct{}
}

func (s *AnalyticsService) Start() {
    for i := 0; i < 4; i++ {
        go s.worker()
    }
}

func (s *AnalyticsService) Enqueue(r *http.Request) {
    select {
    case s.queue <- r:
    default:
        // очередь переполнена — отбрасываем или логируем
    }
}

func (s *AnalyticsService) Stop() {
    close(s.queue)
    <-s.done
}