@eudora
В Go можно использовать каналы для создания конвейера, который может принимать входные данные из массива, преобразовывать их и передавать их на следующий этап. Для возведения в квадрат элементов массива можно создать конвейер, который будет включать следующие этапы:
Ниже приведен пример кода для возведения в квадрат элементов массива с использованием каналов в 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
на этом канале и выводим результаты.