Iteração sobre Canais (Range Over Channels)

Beginner

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

Introdução

Este laboratório tem como objetivo testar sua capacidade de iterar sobre valores recebidos de um canal usando a sintaxe for e range em Golang.

Iteração sobre Canais (Range Over Channels)

Você deve escrever uma função que recebe um canal de inteiros e retorna a soma de todos os inteiros recebidos do canal.

  • A função deve ser chamada sumInts.
  • A função deve receber um único parâmetro do tipo chan int.
  • A função deve retornar um único valor inteiro.
  • Você não pode usar nenhum loop ou recursão dentro do corpo da função.
  • Você não pode usar nenhum pacote externo.
$ go run range-over-channels.go
one
two

## Este exemplo também mostrou que é possível fechar
## um canal não vazio, mas ainda ter os valores
## restantes recebidos.

Abaixo está o código completo:

// Em um exemplo [anterior](range), vimos como `for` e
// `range` fornecem iteração sobre estruturas de dados básicas.
// Também podemos usar esta sintaxe para iterar sobre
// valores recebidos de um canal.

package main

import "fmt"

func main() {

    // Vamos iterar sobre 2 valores no canal `queue`.
    queue := make(chan string, 2)
    queue <- "one"
    queue <- "two"
    close(queue)

    // Este `range` itera sobre cada elemento conforme ele é
    // recebido de `queue`. Como nós `close`amos o
    // canal acima, a iteração termina após
    // receber os 2 elementos.
    for elem := range queue {
        fmt.Println(elem)
    }
}

Resumo

Neste laboratório, você foi encarregado de escrever uma função que soma todos os inteiros recebidos de um canal usando a sintaxe for e range em Golang. Ao concluir este laboratório, você deve ter uma melhor compreensão de como iterar sobre valores recebidos de um canal e como usar goroutines para receber valores de um canal.