| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // closures_goroutines.go
- package main
- import (
- "fmt"
- "time"
- )
- var values = [5]int{10, 11, 12, 13, 14}
- func main() {
- // version A:
- for ix := range values { // ix is index!
- func() {
- fmt.Print(ix, " ")
- }() // call closure, prints each index
- }
- fmt.Println()
- // version B: same as A, but call closure as a goroutine
- for ix := range values {
- go func() {
- fmt.Print(ix, " ")
- }()
- }
- time.Sleep(1e9)
- // version C: the right way
- for ix := range values {
- go func(ix interface{}) {
- fmt.Print(ix, " ")
- }(ix)
- }
- time.Sleep(1e9)
- // version D: print out the values:
- for ix := range values {
- val := values[ix]
- go func() {
- fmt.Print(val, " ")
- }()
- }
- time.Sleep(1e9)
- }
- /* Output:
- 0 1 2 3 4
- 4 4 4 4 4
- 1 0 3 4 2
- 0 1 2 4 3
- */
|