Concorrência com Canais em Golang

Beginner

This tutorial is from open-source community. Access the source code

Introdução

O laboratório Channels foi projetado para testar sua compreensão de canais (channels) em Golang. Canais são usados para conectar goroutines concorrentes, permitindo que valores sejam enviados e recebidos entre elas.

Canais (Channels)

Neste laboratório, você deve criar um novo canal (channel) e enviar um valor para ele a partir de uma nova goroutine. Em seguida, você receberá o valor do canal e o imprimirá.

  • Você deve usar a sintaxe make(chan val-type) para criar um novo canal.
  • O canal deve ser tipado pelos valores que ele transmite.
  • Você deve usar a sintaxe channel <- para enviar um valor para o canal.
  • Você deve usar a sintaxe <-channel para receber um valor do canal.
  • Você deve usar uma nova goroutine para enviar o valor para o canal.
## Quando executamos o programa, a mensagem `"ping"` é
## passada com sucesso de uma goroutine para outra via
## nosso canal.
$ go run channels.go
ping

## Por padrão, envios e recebimentos bloqueiam até que tanto o
## remetente quanto o receptor estejam prontos. Essa propriedade permitiu
## que esperássemos no final do nosso programa pela mensagem `"ping"`
## sem ter que usar qualquer outra sincronização.

Aqui está o código completo:

// _Canais_ são os canos que conectam goroutines concorrentes.
// Você pode enviar valores para canais de uma
// goroutine e receber esses valores em outra
// goroutine.

package main

import "fmt"

func main() {

    // Crie um novo canal com `make(chan val-type)`.
    // Canais são tipados pelos valores que eles transmitem.
    messages := make(chan string)

    // _Envie_ um valor para um canal usando a sintaxe `channel <-`.
    // Aqui enviamos `"ping"` para o canal `messages`
    // que criamos acima, a partir de uma nova goroutine.
    go func() { messages <- "ping" }()

    // A sintaxe `<-channel` _recebe_ um valor do
    // canal. Aqui receberemos a mensagem `"ping"`
    // que enviamos acima e a imprimiremos.
    msg := <-messages
    fmt.Println(msg)
}

Resumo

O laboratório Channels testa sua capacidade de usar canais (channels) em Golang para enviar e receber valores entre goroutines concorrentes. Ao concluir este laboratório, você terá uma melhor compreensão de como os canais funcionam e como eles podem ser usados para melhorar o desempenho de seus programas Golang.