Назад к задачам
Mail.ruПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Middle — Senior
6
Ускорение параллельного получения данных о пользователях за фиксированный срок
Компании, где спрашивали:
Условие задачи
Необходимо доработать функцию Do, чтобы она:
- завершала обработку любого количества пользователей ровно за 10 мс;
- запускала запросы к
fetchByNameпараллельно; - корректно учитывала контекст
ctxи передавала возникающие ошибки наружу.
import (
"context"
"fmt"
"math/rand"
"time"
)
func main() {
fmt.Println(Do(context.Background(), []User{{"aaa"}, {"bbb"}, {"ccc"}, {"ddd"}, {"eee"}}))
}
type User struct {
Name string
}
func fetchByName(ctx context.Context, userName string) (int, error) {
// имитируем сетевой запрос, который занимает 10 мс
time.Sleep(10 * time.Millisecond)
return rand.Int() % 100000, nil
}
func Do(ctx context.Context, users []User) (map[string]int, error) {
resultMap := make(map[string]int)
// TODO: реализовать параллельный вызов fetchByName и собрать результаты в resultMap
// при возникновении ошибки сразу вернуть текущие данные и ошибку
// обеспечить, что общее время работы функции не превышает 10 мс независимо от количества пользователей
return resultMap, nil
}