Golang Goroutines: методы и примеры параллелизма в Go

Вот несколько методов и примеров, связанных с горутинами в Golang:

  1. Создание горутины:

    go func() {
    // Code to be executed concurrently
    }()

    В этом примере анонимная функция выполняется одновременно как горутина с использованием ключевого слова go.

  2. Передача аргументов в горутины:

    go func(msg string) {
    fmt.Println(msg)
    }("Hello, Goroutine!")

    Здесь горутина принимает сообщение в качестве аргумента и печатает его.

  3. Синхронизация с группами ожидания:

    var wg sync.WaitGroup
    func main() {
    wg.Add(1)
    go worker()
    wg.Wait()
    }
    func worker() {
    defer wg.Done()
    // Code for the worker goroutine
    }

    sync.WaitGroupиспользуется для синхронизации горутин. Метод Add()добавляет количество горутин, которые нужно ожидать, а метод Wait()блокируется, пока все горутины не будут выполнены. Метод Done()вызывается, чтобы указать, что горутина завершила свое выполнение.

  4. Канал коммуникации:

    func main() {
    ch := make(chan int)
    go func() {
        ch <- 42 // Sending data into the channel
    }()
    result := <-ch // Receiving data from the channel
    fmt.Println(result)
    }

    Каналы используются для связи и синхронизации между горутинами. В этом примере значение отправляется в канал с помощью оператора <-, а затем оно принимается и печатается основной горутиной.