fork download
  1. package main
  2.  
  3. import "fmt"
  4. import "time"
  5.  
  6. func background_merger(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {
  7. for i:=0; i<n; i++ {
  8. num1 := <-in1
  9. num2 := <-in2
  10. out<- (f(num1) + f(num2))
  11. }
  12. }
  13.  
  14. func Merge2Channels(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {
  15. go background_merger(f, in1, in2, out, n)
  16. }
  17.  
  18. func foo(num int) int {
  19. time.Sleep(time.Millisecond * 200)
  20. return num;
  21. }
  22.  
  23. func feed_channels(in1 chan<- int, in2 chan<- int, n int) {
  24. for i:=0; i<n; i++ {
  25. in1 <- i*1000
  26. in2 <- i*20
  27. }
  28. }
  29.  
  30. func main() {
  31. ch1 := make(chan int)
  32. ch2 := make(chan int)
  33. out := make(chan int)
  34.  
  35. fmt.Println("start")
  36. Merge2Channels(foo, ch1, ch2, out, 10)
  37. go feed_channels(ch1, ch2, 10)
  38. fmt.Println("end")
  39.  
  40. for i:=0; i<10; i++ {
  41. res := <-out
  42. fmt.Println(res)
  43. }
  44. }
  45.  
Success #stdin #stdout 0s 4396KB
stdin
Standard input is empty
stdout
start
end
0
1020
2040
3060
4080
5100
6120
7140
8160
9180