Исходная программа не компилируется. После исправления опечаток она вернёт карту пяти имён со случайными ID и nil-ошибку.
Какой вывод появится в консоли у программы №62
Исходная программа не компилируется. После исправления опечаток она вернёт карту пяти имён со случайными ID и nil-ошибку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст будет напечатан в консоли после выполнения следующей Go‑программы:
import ("fmt"
"time"
"context"
"math/rand"
)
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) {
time.Sleep( 10 * time.Millisecond)
return rand.Int() % 100000, nil
}
func Do(ctx context.Contextm 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
}
Ответ
Исходная программа не компилируется. После исправления опечаток она вернёт карту пяти имён со случайными ID и nil-ошибку.
Исправьте сигнатуру на Do(ctx context.Context, users []User), согласуйте имя fetchByName с объявлением fetchbyName и используйте один регистр userID. Для отдельного файла также необходим package main.
Исправленный цикл выполняет пять запросов последовательно, каждый с задержкой 10 мс. Поэтому время составляет примерно не меньше 50 мс. Числа 0–99999 случайны и могут совпасть; заранее конкретную карту предсказать нельзя. Context внутри имитатора не проверяется.