Goroutine 中執行匿名函數 坑

//相對應for 循環 goroutine跑到慢 因此這裏很大機率只會打印最後一條數據
func goRun() {
    values := []int{1, 2, 3}
    for _, v := range values {
        go func() {
            fmt.Println(v)
        }()
    }
}

//解決1 將參數傳入匿名函數 這樣參數就能夠壓棧了
func goRun2() {
    values := []int{1, 2, 3}
    for _, v := range values {
        go func(i int) {
            fmt.Println(i)
        }(v)
    }
}

//解決2 將參數賦值給臨時變量 也能夠將參數壓棧
func goRun3() {
    values := []int{1, 2, 3, 4, 5, 6}
    for _, v := range values {
        tmp := v
        go func() {
            fmt.Println(tmp)
        }()
    }
}

func main() {
    //goRun()
    //goRun2()
    goRun3()
    time.Sleep(time.Second)
}
相關文章
相關標籤/搜索