Как возвести в квадрат элементы массива с использованием каналов в golang?

Пользователь

от eudora , в категории: Golang , 2 года назад

Как возвести в квадрат элементы массива с использованием каналов в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от rachel , 2 года назад

@eudora 

В Go можно использовать каналы для создания конвейера, который может принимать входные данные из массива, преобразовывать их и передавать их на следующий этап. Для возведения в квадрат элементов массива можно создать конвейер, который будет включать следующие этапы:

  1. Генерация входных данных (элементов массива) и их передача на канал.
  2. Чтение элементов из канала, возведение в квадрат и передача результата на следующий канал.
  3. Чтение элементов из следующего канала и вывод результатов.


Ниже приведен пример кода для возведения в квадрат элементов массива с использованием каналов в Go:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main

import (
	"fmt"
)

func generate(nums ...int) <-chan int {
	out := make(chan int)
	go func() {
		for _, n := range nums {
			out <- n
		}
		close(out)
	}()
	return out
}

func square(in <-chan int) <-chan int {
	out := make(chan int)
	go func() {
		for n := range in {
			out <- n * n
		}
		close(out)
	}()
	return out
}

func main() {
	nums := []int{1, 2, 3, 4, 5}
	in := generate(nums...)
	out := square(in)
	for n := range out {
		fmt.Println(n)
	}
}


В этом примере функция generate создает канал и запускает горутину, которая отправляет элементы массива на этот канал. Функция square принимает входной канал и запускает горутину, которая читает элементы из канала, возведение в квадрат и отправляет результат на выходной канал. В main функции мы создаем входной канал, запускаем функцию square на этом канале и выводим результаты.