pipeline.go
package pipeline func LaunchPipeline(amount int) int { firstCh := generator(amount) secondCh := power(firstCh) thirdCh := sum(secondCh) result := <-thirdCh return result } /* func functionName(in <-chan int) <-chan int { out := make(chan bool, 100) go func() { for v := range in { //nothing } close(out) }() return out } */ func generator(max int) <-chan int { outChInt := make(chan int, 100) go func() { for i := 1; i <= max; i++ { outChInt <- i } close(outChInt) }() return outChInt } func power(in <-chan int) <-chan int { out := make(chan int, 100) go func() { for v := range in { out <- v * v } close(out) }() return out } func sum(in <-chan int) <-chan int { out := make(chan int, 100) go func() { var sum int for v := range in { sum += v } out <- sum close(out) }() return out }
pipeline_test.go
package pipeline import "testing" func TestLaunchPipeline(t *testing.T) { tableTest := [][]int{ {3, 14}, {5, 55}, } var res int for _, test := range tableTest { res = LaunchPipeline(test[0]) if res != test[1] { t.Fatal() } t.Logf("%d == %d\n", res, test[1]) } }