Junior — Middle
Cum se asigură munca și sincronizarea firelor de execuție în Golang?
sobes.tech AI
Răspuns de la AI
În Go, pentru a lucra cu fire de execuție, se folosesc gorutine, care sunt fire ușoare gestionate de runtime-ul Go. Gorutinele sunt inițiate cu cuvântul cheie go înainte de apelarea unei funcții, ceea ce permite executarea lor asincronă.
Pentru sincronizarea gorutinelor, se utilizează canale (channels) și primitive din pachetul sync (de exemplu, Mutex, WaitGroup). Canalele asigură schimbul sigur de date între gorutine și permit sincronizarea acestora.
Exemplu de utilizare a gorutinelor și canalelor:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "gata"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println("Lucru gorutina:", msg)
}
Aici, gorutina principală pornește worker într-o gorutină separată, care după o întârziere trimite un mesaj în canal. Gorutina principală așteaptă primirea mesajului din canal, asigurând sincronizarea.