GO-FUNC问题

  1. 在for循环里面用go func()。很容易出问题。
    go func()实际执行时间是未知的。变量也是覆盖的。只能从参数传入才是对的。
    找个时间把go func()的机制看下。

package main

import (
    "fmt"
)

func main() {
    for i := 0; i < 10; i++ {
        go func(i int) {
            fmt.Println("i=", i)
        }(i)
    }
    select {}
}
i= 9
i= 5
i= 2
i= 3
i= 4
i= 7
i= 6
i= 8
i= 1
i= 0

package main

import (
    "fmt"
)

func main() {
    for i := 0; i < 10; i++ {
        go func() {
            fmt.Println("i=", i)
        }()
    }
    select{}
}
i= 8
i= 10
i= 10
i= 10
i= 7
i= 10
i= 10
i= 10
i= 10
i= 8

你可能感兴趣的:(GO-FUNC问题)