Перебор значений из каналов

Beginner

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

Введение

Этот лабораторный проект旨在测试您使用 Golang 中的forrange语法遍历从通道接收的值的能力。

Перебор значений из каналов

Требуется написать функцию, которая принимает канал целых чисел и возвращает сумму всех целых чисел, полученных из канала.

  • Функция должна называться sumInts.
  • Функция должна принимать один параметр типа chan int.
  • Функция должна возвращать одно целое значение.
  • В теле функции запрещено использовать любые циклы или рекурсию.
  • Запрещено использовать любые внешние пакеты.
$ go run range-over-channels.go
one
two

## Этот пример также показал, что можно закрыть
## непустой канал, но по-прежнему получать оставшиеся
## значения.

Ниже представлен полный код:

// В [предыдущем](range) примере мы увидели, как `for` и
// `range` обеспечивают итерацию по базовым структурам данных.
// Мы также можем использовать этот синтаксис для итерации по
// значениям, полученным из канала.

package main

import "fmt"

func main() {

    // Мы будем итерироваться по 2 значениям в канале `queue`.
    queue := make(chan string, 2)
    queue <- "one"
    queue <- "two"
    close(queue)

    // Эта `range` итерируется по каждому элементу, по мере его
    // получения из `queue`. Поскольку мы закрыли канал выше,
    // итерация завершается после получения 2 элементов.
    for elem := range queue {
        fmt.Println(elem)
    }
}

Резюме

В этом лабораторном проекте вам предстояло написать функцию, которая суммирует все целые числа, полученные из канала, используя синтаксис for и range в Golang. Завершив этот лабораторный проект, вы должны лучше понять, как итерироваться по значениям, полученным из канала, и как использовать горутины для приема значений из канала.