github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/blog/content/pipelines/square2.go (about)

     1  // +build OMIT
     2  
     3  package main
     4  
     5  import "fmt"
     6  
     7  // gen sends the values in nums on the returned channel, then closes it.
     8  func gen(nums ...int) <-chan int {
     9  	out := make(chan int)
    10  	go func() {
    11  		for _, n := range nums {
    12  			out <- n
    13  		}
    14  		close(out)
    15  	}()
    16  	return out
    17  }
    18  
    19  // sq receives values from in, squares them, and sends them on the returned
    20  // channel, until in is closed.  Then sq closes the returned channel.
    21  func sq(in <-chan int) <-chan int {
    22  	out := make(chan int)
    23  	go func() {
    24  		for n := range in {
    25  			out <- n * n
    26  		}
    27  		close(out)
    28  	}()
    29  	return out
    30  }
    31  
    32  func main() {
    33  	// Set up the pipeline and consume the output.
    34  	for n := range sq(sq(gen(2, 3))) {
    35  		fmt.Println(n) // 16 then 81
    36  	}
    37  }