github.com/maikovskiys/l1tasks@v0.0.0-20230927052451-6436d7687dc9/develop/dev09/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"math"
     6  	"sync"
     7  )
     8  
     9  /*
    10  Разработать конвейер чисел.
    11  Даны два канала: в первый пишутся числа (x) из массива, во второй — результат операции x*2,
    12  после чего данные из второго канала должны выводиться в stdout.
    13  */
    14  func main() {
    15  	xch := make(chan int)
    16  	qch := make(chan float64)
    17  	xarr := []int{1, 2, 3, 4, 5, 6, 7, 8}
    18  	wg := sync.WaitGroup{}
    19  	wg.Add(1)
    20  	go func(chan int, []int) {
    21  		defer wg.Done()
    22  		for _, number := range xarr {
    23  			xch <- number
    24  		}
    25  		close(xch)
    26  	}(xch, xarr)
    27  	wg.Add(1)
    28  	go func(<-chan int, chan float64) {
    29  		defer wg.Done()
    30  		for number := range xch {
    31  			res := math.Pow(float64(number), 2)
    32  			qch <- res
    33  		}
    34  		close(qch)
    35  	}(xch, qch)
    36  	for v := range qch {
    37  		fmt.Println(v)
    38  	}
    39  	wg.Wait()
    40  }