Junior — Senior
53
Последовательные сетевые запросы
Компании, где спрашивали:
Условие задачи
Определите, какой результат выведет программа. Необходимо разобраться, как работает последовательный вызов функции fetchByName, какое влияние оказывает time.Sleep, и в каком виде будет сформирована возвращаемая карта map[string]int.
package main
import (
"context"
"fmt"
"math/rand"
"time"
)
type User struct {
Name string
}
func main() {
fmt.Println(Do(context.Background(), []User{{"aaa"}, {"bbb"}, {"ccc"}, {"ddd"}, {"eeee"}}))
}
// fetchByName изменять нельзя
func fetchByName(ctx context.Context, userName string) (int, error) {
time.Sleep(10 * time.Millisecond) // имитация сетевого похода
return rand.Int() % 100000, nil
}
// все изменения должны производиться в данной функции
func Do(ctx context.Context, users []User) (map[string]int, error) {
collected := make(map[string]int)
for _, u := range users {
userID, err := fetchByName(ctx, u.Name)
if err != nil {
return collected, err
}
collected[u.Name] = userID
}
return collected, nil
}
``