В чем основная проблема асинхронного вывода в Go

«В чем основная проблема асинхронного вывода в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основная проблема асинхронного вывода в Go — это race condition (гонка данных) при конкурентном доступе к общим ресурсам (например, stdout). Без синхронизации вывод может перемешиваться.

Пример:

func main() {
    for i := 0; i < 10; i++ {
        go func() {
            fmt.Print(i) // Гонка данных: i и вывод могут перемешаться
        }()
    }
    time.Sleep(time.Second)
}

Решение:

  1. Использовать мьютексы (sync.Mutex)
  2. Каналы для синхронизации
  3. sync.WaitGroup для ожидания завершения горутин

Пример с WaitGroup:

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(x int) {
            defer wg.Done()
            fmt.Print(x)
        }(i)
    }
    wg.Wait()
}