package main
import (
"fmt"
)
type Callback func() int
func doSomething() {}
func callbackFactory(i int) Callback {
return func() int {
fmt.Println("callback", i)
return i
}
}
var callbacks []Callback = []Callback{
callbackFactory(1),
callbackFactory(2),
callbackFactory(3),
callbackFactory(4)}
func combiner(results []int) int {
sum := 0
for result := range results {
sum += result
if result == 2 {
break
}
}
return sum
}
func main() {
results := make([]int, len(callbacks))
for idx, callback := range callbacks {
doSomething()
results[idx] = callback()
}
fmt.Println("sum", combiner(results))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImZtdCIKKQoKdHlwZSBDYWxsYmFjayBmdW5jKCkgaW50CgpmdW5jIGRvU29tZXRoaW5nKCkge30KCmZ1bmMgY2FsbGJhY2tGYWN0b3J5KGkgaW50KSBDYWxsYmFjayB7CglyZXR1cm4gZnVuYygpIGludCB7CgkJZm10LlByaW50bG4oImNhbGxiYWNrIiwgaSkKCQlyZXR1cm4gaQoJfQp9Cgp2YXIgY2FsbGJhY2tzIFtdQ2FsbGJhY2sgPSBbXUNhbGxiYWNrewoJY2FsbGJhY2tGYWN0b3J5KDEpLAoJY2FsbGJhY2tGYWN0b3J5KDIpLAoJY2FsbGJhY2tGYWN0b3J5KDMpLAoJY2FsbGJhY2tGYWN0b3J5KDQpfQoKZnVuYyBjb21iaW5lcihyZXN1bHRzIFtdaW50KSBpbnQgewoJc3VtIDo9IDAKCWZvciByZXN1bHQgOj0gcmFuZ2UgcmVzdWx0cyB7CgkJc3VtICs9IHJlc3VsdAoJCWlmIHJlc3VsdCA9PSAyIHsKCQkJYnJlYWsKCQl9Cgl9CglyZXR1cm4gc3VtCn0KCmZ1bmMgbWFpbigpIHsKCglyZXN1bHRzIDo9IG1ha2UoW11pbnQsIGxlbihjYWxsYmFja3MpKQoJZm9yIGlkeCwgY2FsbGJhY2sgOj0gcmFuZ2UgY2FsbGJhY2tzIHsKCQlkb1NvbWV0aGluZygpCgkJcmVzdWx0c1tpZHhdID0gY2FsbGJhY2soKQoJfQoJZm10LlByaW50bG4oInN1bSIsIGNvbWJpbmVyKHJlc3VsdHMpKQp9Cg==