Sobes.tech
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.