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