Aula 28 – Tutorial Golang – Direção dos Canais

Aula 28 – Tutorial Golang – Direção dos Canais

Tutorial Golang - Channel Synchronization

Tutorial Golang – Channel Synchronization

Pacote Programador Fullstack

Pacote Programador Fullstack

Página principal do blog

Todas as aulas desse curso

Aula 27                        Aula 29

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

Backing Track / Play-Along

Código Fluente

Putz!

Vocal Techniques and Exercises

PIX para doações

PIX Nubank

PIX Nubank

Aula 28 – Tutorial Golang – Direção dos Canais

Fontes usadas para esse post:

Combinados com goroutines, os canais formam a espinha dorsal do modelo de simultaneidade inspirado em CSP(Communicating sequential processes) do Go.

Eles são simples e expressivos, mas, podem ser difíceis de usar adequadamente, especialmente se você precisar controlar quem pode ler ou escrever neles.

É possível criar canais bidirecionais e unidirecionais em Go.

Pode-se criar um canal para o qual só podemos enviar dados, assim como pode ser criado um canal do qual só podemos receber dados.

Isso é determinado pela direção da seta do canal.

A direção da seta para um canal especifica a direção do fluxo de dados.

  • chan : canal bidirecional (ambos lê e escreve)
  • chan<- : só escreve no canal (seta a direita)
  • <-chan : só ler do canal(seta a esquerda)

Essa especificidade aumenta a segurança de tipo do programa.

Exemplo

No código abaixo, a função de ping() aceita apenas um canal para envio de valores.

Se você tentar receber alguma coisa nesse canal, vai dá um erro de compilação, faça o teste descomentando a linha //pings <- “Hi, testing” no código abaixo.

invalid operation: cannot send to receive-only channel pings (variable of type <-chan string)compilerInvalidSend 

A função pong() aceita um canal para recebimentos (pings) e a palavra chan está a direita da seta(<-chan string), e um segundo para envios (pongs), a palavra chan está a esquerda da seta(chan<-).


// When using channels as function parameters, you can
// specify if a channel is meant to only send or receive
// values. This specificity increases the type-safety of
// the program.

package main

import "fmt"

func ping(pings chan<- string, msg string) {
    //put the received message in the pings channel output
    pings <- msg
}

func pong(pings <-chan string, pongs chan<- string) {
    //read the message that was passed to pings channel and assign to msg
    msg := <-pings
    //put the msg content in the pongs channel output
    pongs <- msg
    //pings <- "Trying send message to pings channel"
}

func main() {
    pings := make(chan string, 1)
    pongs := make(chan string, 1)
    //call ping function passing pings channel to it
    ping(pings, "Sending message to the pings channel")
    //read message from pings channel inside pong function
    pong(pings, pongs)
    //print the output from pongs channel
    fmt.Println(<-pongs)
}

Executando o código com: go run channel_directions.go

Temos a seguinte saída: Sending message to the pings channel 

É isso pessoal, fico por aqui!

Até mais. 🙂

Página principal do blog

Todas as aulas desse curso

Aula 27                        Aula 29

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>