求教一个问题

lionhp · · 601 次点击
2楼 <a href="/user/lionhp" title="@lionhp">@lionhp</a> 你这个觉悟不准确。“匿名函数在不传值的情况下只能获取最后一次循环的值了”这句话是错误的。并不一定是获取最后一次循环的值。如果GOMAXPROCS不是1的话,并且循环非常多次数的话,有些goroutine会在for循环进行中运行,取得值那就是当前i的值。这涉及到runtime的G、P和M。 例子如下: ``` package main import ( &#34;fmt&#34; &#34;runtime&#34; &#34;sync&#34; ) func main() { runtime.GOMAXPROCS(4) j := 1000000 var wg sync.WaitGroup wg.Add(j) for i := 0; i &lt; j; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() } ```
#4
更多评论
`注意传参数和闭包` ``` package main import ( &#34;fmt&#34; &#34;runtime&#34; &#34;sync&#34; ) func main() { runtime.GOMAXPROCS(1) var wg sync.WaitGroup wg.Add(10) for i := 0; i &lt; 10; i++ { go func(i int) { fmt.Println(i) wg.Done() }(i) } wg.Wait() } ```
#1
感谢,果然还是基础不扎实了。匿名函数在不传值的情况下只能获取最后一次循环的值了
#2