Aula 32 – Tutorial Golang – Fechamento de Canais em Go

Aula 32 – Fechamento de Canais em Go – Comunicação e Finalização

Tutorial Golang

Tutorial Golang

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!

Pacote Programador Fullstack

Pacote Programador Fullstack

Página principal do blog

Todas as aulas desse curso

Aula 31                        Aula 33

Redes Sociais:

facebook

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

PIX Nubank

PIX Nubank

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:

  1. A mensagem “Trabalho enviado: X” indica que cada trabalho foi enviado para o canal jobs na goroutine principal.
  2. As mensagens “Trabalho recebido: X” indicam que a goroutine trabalhadora recebeu e processou cada trabalho enviado.
  3. A mensagem “Todos os trabalhos enviados” é exibida após o fechamento do canal jobs na goroutine principal.
  4. 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.

Eu fico por aqui e agradeço a você pela audiência.

Até mais. 🙂

Página principal do blog

Todas as aulas desse curso

Aula 31                        Aula 33

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>