fork download
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. type Callback func() int
  8. type Wrapper func() int
  9.  
  10. func doSomething() {}
  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(wrappers []Wrapper) int {
  25. sum := 0
  26. for _, wrapper := range wrappers {
  27. result := wrapper()
  28. sum += result
  29. if result == 2 {
  30. break
  31. }
  32. }
  33. return sum
  34. }
  35.  
  36. func wrapperFactory(callback Callback) Wrapper {
  37. return func() int {
  38. doSomething()
  39. return callback()
  40. }
  41. }
  42.  
  43. func main() {
  44. wrappers := make([]Wrapper, len(callbacks))
  45. for idx, callback := range callbacks {
  46. wrappers[idx] = wrapperFactory(callback)
  47. }
  48.  
  49. fmt.Println("sum", combiner(wrappers))
  50. }
  51.  
Success #stdin #stdout 0s 420544KB
stdin
Standard input is empty
stdout
callback 1
callback 2
sum 3