Sobes.tech
Junior — Middle

Quais são as principais construções usadas para gerenciar e executar goroutines na linguagem de programação?

sobes.tech IA

Resposta da IA

Para gerir e executar goroutines em Go, utilizam-se as seguintes construções principais:

  • Início de uma goroutine: a palavra-chave go antes de chamar uma função executa-a numa goroutine separada, por exemplo:

    go minhaFuncao()
    

    Isto permite executar a função de forma assíncrona.

  • Canais (channels): utilizados para sincronizar e trocar dados entre goroutines. Um canal é criado assim:

    ch := make(chan int)
    

    Enviar e receber dados:

    ch <- 42      // envio
    val := <-ch   // receção
    

    Os canais garantem uma comunicação segura e bloqueiam a goroutine se os dados não estiverem prontos.

  • sync.WaitGroup: usado para esperar que um grupo de goroutines termine. Exemplo:

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // trabalho da goroutine
    }()
    wg.Wait() // espera que todas as goroutines terminem
    
  • select: permite esperar várias operações em canais ao mesmo tempo, escolhendo a pronta para executar. Exemplo:

    select {
    case msg := <-ch1:
        fmt.Println("Recebido de ch1:", msg)
    case ch2 <- 42:
        fmt.Println("Enviado para ch2")
    default:
        fmt.Println("Nenhuma operação pronta")
    }
    

Estas construções permitem lançar, sincronizar e gerir a execução paralela em Go.