Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: goroutine, channel, mutex, waitgroup, synchronization

Как передавать данные между горутинами (каналы, sync-пакеты)?

Вопрос направлен на проверку знания способов безопасного обмена данными между горутинами.

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

Данные между горутинами чаще всего передаются через каналы (chan), которые обеспечивают безопасную синхронизацию. Также можно использовать sync-пакет, например sync.Mutex или sync.WaitGroup, если данные хранятся в разделяемой памяти.

Длинный ответ

В Go основная концепция — "не делитесь памятью, а передавайте значения", и именно для этого используются каналы.

Основные способы:

  1. Каналы (Channels):

    • Обеспечивают безопасный обмен значениями.

    • Могут быть буферизированными или нет.

    • Пример:

      ch := make(chan int)
      go func() {
          ch <- 42
      }()
      fmt.Println(<-ch)
  2. sync.Mutex / RWMutex:

    • Используется для защиты разделяемых структур от конкурентного доступа.

    • Пример:

      var mu sync.Mutex
      mu.Lock()
      // чтение или запись
      mu.Unlock()
  3. sync.WaitGroup:

    • Позволяет дождаться завершения набора горутин.

    • Не передаёт данные, но координирует выполнение.

  4. sync/atomic:

    • Для атомарных операций с числовыми значениями.

Когда что использовать:

  • Для передачи данных между горутинами — каналы.

  • Для общего доступа к структурам — Mutex.

  • Для ожидания завершения — WaitGroup.

Вывод:
Предпочтительно использовать каналы для передачи данных, а sync — для управления доступом и координации выполнения.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#goroutine

#channel

#mutex

#waitgroup

#synchronization

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.