Какой вывод получим при запуске программы №60

Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.

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

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

Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.

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

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

Условие

Разберём, какой текст будет напечатан в консоль после выполнения следующей Go‑программы:

import ("fmt"
        "time")

func main() {
    {
        sharedMap := make(map[int]bool)
        go func() {
            sharedMap[1] = true
        }()
        go func() {
            sharedMap[1] = true
        }()
        go func() {
            sharedMap[1] = false
        }()
        
        time.Sleep(1 * time.Second)
        fmt.Println("%v", sharedMap[1])
    }
}

Вопрос: какое значение будет выведено на экран?

Ответ

Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.

Даже если аварии не произошло, порядок записей true/false не определён. Кроме того, fmt.Println не интерпретирует %v как формат: он напечатает его буквально перед значением. Для исправления защищайте все обращения одним mutex и ждите завершения через WaitGroup. Если нужен конкретный итог, задайте порядок операций или правило объединения результатов.

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

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

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

Подробнее