Управление параллелизмом в Go: каналы и горутины, объясненные примерами кода

  1. Создание канала:

    ch := make(chan int)
  2. Отправка данных в канал:

    ch <- 42
  3. Получение данных из канала:

    data := <-ch
  4. Закрытие канала:

    close(ch)
  5. Проверка закрытия канала:

    data, ok := <-ch
    if !ok {
    // channel is closed
    }
  6. Использование оператора select для работы с несколькими каналами:

    select {
    case data := <-ch1:
    // handle data from ch1
    case data := <-ch2:
    // handle data from ch2
    }
  7. Использование горутин для одновременного выполнения функций:

    go func() {
    // code to be executed concurrently
    }()
  8. Ожидание завершения горутин с использованием sync.WaitGroup:

    var wg sync.WaitGroup
    wg.Add(1) // increment the WaitGroup counter
    go func() {
    defer wg.Done() // decrement the WaitGroup counter when finished
    // code to be executed concurrently
    }()
    wg.Wait() // wait for all goroutines to finish

Эти примеры демонстрируют базовое использование каналов, горутин и управления параллелизмом в Go. Важно отметить, что в языке Go доступно множество более продвинутых методов и шаблонов.