Эйч
Эйч
  • Все менторы
Задачи/Go-разработчик/Создание rate limit

Создание rate limit

Условие задачи

Необходимо реализовать ограничение количества одновременно выполняющихся горутин при отправке большого количества запросов (например, 10 000). Все запросы должны быть выполнены, но в каждый момент времени не должно выполняться более N горутин. Обработка ошибок при этом не требуется

gopackage main

import (
  "context"
  "fmt"
  "strconv"
  "sync"

  "github.com/sirupsen/logrus"
)

type Request struct {
  Payload string
}

type Client interface {
  SendRequest(ctx context.Context, request Request) error
}

type client struct{}

func (c client) SendRequest(ctx context.Context, request Request) error {
  fmt.Println("send request", request.Payload)
  return nil
}

func main() {
  ctx := context.Background()
  c := client{}
  requests := make([]Request, 100)
  for i := 0; i < 100; i++ {
    requests[i] = Request{Payload: strconv.Itoa(i)}
  }

  log := logrus.New()
  makeBatchApiCalls(ctx, c, log, requests)
}

func makeBatchApiCalls(ctx context.Context, c Client, log *logrus.Logger, requests []Request) {
  wg := sync.WaitGroup{}
  for _, r := range requests {
    r := r
    wg.Add(1)
    go func() {
      defer wg.Done()
      err := c.SendRequest(ctx, r)
      if err != nil {
        log.WithError(err).Error("send request")
      }
    }()
  }
  wg.Wait()
}

Профессия

Go-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Профессии
Компания
С чем помогаемОтзывыВопросы и ответыСертификатыВебинарыСтать ментором

Платформа принадлежит ООО "Эйч Карьера"
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, город Москва, Старопименовский пер, д. 18 стр. 2, помещ./ком./этаж I/19/2

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта