Sobes.tech
Junior — Middle

Hoe wordt het werk en de synchronisatie van uitvoeringsthreads in Golang verzekerd?

sobes.tech AI

Antwoord van AI

In Go worden goroutines gebruikt voor het werken met uitvoeringsstromen, dit zijn lichte threads die beheerd worden door de Go-runtime. Goroutines worden gestart met het sleutelwoord go vóór het aanroepen van een functie, waardoor deze asynchroon kan worden uitgevoerd.

Voor het synchroniseren van goroutines worden kanalen (channels) en primitieve uit het sync-pakket gebruikt (bijvoorbeeld Mutex, WaitGroup). Kanalen zorgen voor een veilige gegevensuitwisseling tussen goroutines en maken synchronisatie mogelijk.

Voorbeeld van het gebruik van goroutines en kanalen:

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "klaar"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Werk van de goroutine:", msg)
}

Hier start de hoofd-goroutine worker in een aparte goroutine, die na een vertraging een bericht naar het kanaal stuurt. De hoofd-goroutine wacht op het ontvangen van het bericht uit het kanaal, wat de synchronisatie garandeert.