Junior — Middle
Como é que o trabalho e a sincronização dos threads de execução são garantidos em Golang?
sobes.tech IA
Resposta da IA
Em Go, para trabalhar com threads de execução, usam-se as goroutines, que são threads leves geridos pelo runtime do Go. As goroutines são iniciadas com a palavra-chave go antes de chamar uma função, permitindo que ela seja executada de forma assíncrona.
Para sincronizar as goroutines, utilizam-se canais (channels) e primitivas do pacote sync (por exemplo, Mutex, WaitGroup). Os canais proporcionam uma troca segura de dados entre goroutines e permitem sincronizá-las.
Exemplo de uso de goroutines e canais:
package main
import (
"fmt"
"time"
)
func worker(ch chan string) {
time.Sleep(time.Second)
ch <- "pronto"
}
func main() {
ch := make(chan string)
go worker(ch)
msg := <-ch
fmt.Println("Trabalho da goroutine:", msg)
}
Aqui, a goroutine principal inicia worker numa goroutine separada, que após um atraso envia uma mensagem pelo canal. A goroutine principal espera receber a mensagem do canal, garantindo a sincronização.