fork download
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. )
  7.  
  8. type Callback func() int
  9.  
  10. func doSomething() {}
  11.  
  12. func callbackFactory(i int) Callback {
  13. return func() int {
  14. fmt.Println("callback", i)
  15. return i
  16. }
  17. }
  18.  
  19. var callbacks []Callback = []Callback{
  20. callbackFactory(1),
  21. callbackFactory(2),
  22. callbackFactory(3),
  23. callbackFactory(4)}
  24.  
  25. func combiner(iterator chan int) int {
  26. sum := 0
  27. for result := range iterator {
  28. sum += result
  29. if result == 2 {
  30. break
  31. }
  32. }
  33. return sum
  34. }
  35.  
  36. func main() {
  37. iterator := make(chan int)
  38. go func() {
  39. for _, callback := range callbacks {
  40. doSomething()
  41. iterator <- callback()
  42. }
  43. close(iterator)
  44. fmt.Println("terminate goroutine")
  45. }()
  46. fmt.Println("sum", combiner(iterator))
  47. time.Sleep(time.Second)
  48. }
  49.  
Success #stdin #stdout 0s 420736KB
stdin
Standard input is empty
stdout
callback 1
callback 2
callback 3
sum 3