go 闭包问题

112 阅读1分钟

背景

go的面试中很多会问到闭包的问题,如下

package main

import (
	"fmt"
    "time"
)

func main() {
	for i := 0; i < 100; i++ {
		go func() {
			fmt.Println(i)
		}()
	}
	time.Sleep(time.Minute)
}

答案

其实这个问的不是很准确,因为GOMAXPROCS是否为1对于结果有影响 默认GOMAXPROCS为NumCPU,也就是要看cpu数

如果NumCPU为1(非1可以设置runtime.GOMAXPROCS(1)模拟),那么结果就是

100
...
100

如果NumCPU为非1,那么结果就是其实是不确定的,比如可能是

...
100
100
60
88