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 }