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

GolangGolangBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ConcurrencyGroup(["Concurrency"]) go/ConcurrencyGroup -.-> go/channels("Channels") subgraph Lab Skills go/channels -.-> lab-15496{{"Перебор значений из каналов"}} end

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

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

  • Функция должна называться 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. Завершив этот лабораторный проект, вы должны лучше понять, как итерироваться по значениям, полученным из канала, и как использовать горутины для приема значений из канала.