Aula 32 – Tutorial Golang – Fechamento de Canais em Go
Aula 32 – Fechamento de Canais em Go – Comunicação e Finalização
Compartilho com vocês conteúdo de qualidade de forma gratuita como parte da missão do Código Fluente.
No entanto, também quero apresentar uma oportunidade imperdível de aprimorar suas habilidades em programação para alcançar um nível avançado.
Conheça agora mesmo o curso Master Full Stack clicando no link abaixo 👇 e confira!
Página principal do blog
Todas as aulas desse curso
Aula 31 Aula 33
Redes Sociais:
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Melhore seu NETWORKING
https://digitalinnovation.one/
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no https://github.com/toticavalcanti.
Código final da aula:
https://github.com/toticavalcanti
Canais do Youtube
Toti
Lofi Music Zone Beats
Backing Track / Play-Along
Código Fluente
Putz!
Vocal Techniques and Exercises
PIX para doações
Aula 32 – Tutorial Golang – Fechamento de Canais em Go
Fechamento de Canais em Go – Comunicação e Finalização
1. Introdução:
Nesta aula, vamos explorar o conceito de fechamento de canais em Go e entender como ele é usado para indicar a finalização do trabalho e comunicar essa informação às goroutines.
O fechamento de canais é uma técnica importante para sincronização e comunicação entre goroutines em Go.
2. Canais em Go:
Antes de discutirmos o fechamento de canais, vamos revisar brevemente o conceito de canais em Go.
Os canais são uma construção poderosa que permitem a comunicação segura e a sincronização entre goroutines.
Eles são usados para enviar e receber valores entre as goroutines.
3. Fechamento de Canais:
O fechamento de canais é uma maneira de indicar que não serão mais enviados valores através do canal.
Quando um canal é fechado, os receptores podem detectar esse fechamento e agir de acordo.
O fechamento de canais é útil para comunicar a conclusão do trabalho ou para indicar que não há mais valores a serem esperados.
4. Exemplo Prático:
Aqui está um exemplo prático que demonstra o fechamento de canais em ação:
package main
import "fmt"
func main() {
jobs := make(chan int, 5)
done := make(chan bool)
go func() {
for {
j, more := <-jobs
if more {
fmt.Println("Trabalho recebido:", j)
} else {
fmt.Println("Todos os trabalhos recebidos")
done <- true
return
}
}
}()
for j := 1; j <= 3; j++ {
jobs <- j
fmt.Println("Trabalho enviado:", j)
}
close(jobs)
fmt.Println("Todos os trabalhos enviados")
<-done
}
Neste exemplo, criamos dois canais: jobs
e done
.
O canal jobs
é usado para enviar trabalhos da goroutine principal para a goroutine trabalhadora, enquanto o canal done
é usado para sincronizar a finalização da goroutine trabalhadora.
A goroutine trabalhadora recebe trabalhos do canal jobs
usando um loop infinito.
Se o canal estiver aberto e houver trabalhos disponíveis, a goroutine trabalhadora recebe e processa esses trabalhos.
Caso contrário, se o canal estiver fechado, a goroutine trabalhadora imprime “Todos os trabalhos recebidos” e envia um valor verdadeiro para o canal done
para indicar sua conclusão.
Na goroutine principal, enviamos três trabalhos para o canal jobs
usando um loop for
.
Em cada iteração, é enviado o trabalho atual e exibimos uma mensagem indicando que o trabalho foi enviado.
Após o envio de todos os trabalhos, fechamos o canal jobs
usando a função close()
Aqui está a saída esperada ao executar o exemplo:
Trabalho enviado: 1
Trabalho enviado: 2
Trabalho enviado: 3
Todos os trabalhos enviados
Trabalho recebido: 1
Trabalho recebido: 2
Trabalho recebido: 3
Todos os trabalhos recebidos
Explicação da saída:
- A mensagem “Trabalho enviado: X” indica que cada trabalho foi enviado para o canal
jobs
na goroutine principal. - As mensagens “Trabalho recebido: X” indicam que a goroutine trabalhadora recebeu e processou cada trabalho enviado.
- A mensagem “Todos os trabalhos enviados” é exibida após o fechamento do canal
jobs
na goroutine principal. - A mensagem “Todos os trabalhos recebidos” é exibida quando a goroutine trabalhadora detecta o fechamento do canal e conclui o processamento de todos os trabalhos.
Essa saída demonstra a comunicação entre as goroutines, o fechamento do canal jobs
após o envio de todos os trabalhos e a indicação de conclusão através do canal done
.