Что покажет вывод программы №39

Программа не компилируется из-за wg.Wait без скобок. После замены на wg.Wait() остаются конкурентные записи в map: WaitGroup не защищает сам контейнер.

Короткий ответ

Что ответить на собеседовании

Программа не компилируется из-за wg.Wait без скобок. После замены на wg.Wait() остаются конкурентные записи в map: WaitGroup не защищает сам контейнер.

Подробный разбор

Ответ с пояснениями

Условие

Какой результат будет напечатан при запуске следующей программы?

import (
        "fmt"
        "sync"
        )

func main () {
    var wg sync.WaitGroup
    m := make(map[int]int)

    for i := 0 ; i < 10; i++{
        wg.Add(1)
        go func(key int) {
            defer wg.Done()
            m[key] = key * key
        }(i)
    }
    wg.Wait
            
    for key, val := range m{
        fmt.Printf("Key; %d, Value: %d\n", key, val)
    }
}

Ответ

Программа не компилируется из-за wg.Wait без скобок. После замены на wg.Wait() остаются конкурентные записи в map: WaitGroup не защищает сам контейнер.

Добавьте var mu sync.Mutex и окружите m[key] = key*key вызовами mu.Lock()/mu.Unlock(). После ожидания можно безопасно обходить map. В ней будут квадраты ключей 0–9: от 0 до 81, порядок обхода не гарантирован. Без mutex возможны data race и fatal error concurrent map writes, даже если ключи различаются.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее