以下代码有什么问题,怎么解决?

total, sum := 0, 0
for i := 1; i <= 10; i++ {
    sum += i
    go func() {
        total += i
    }()
}
fmt.Printf("total:%d sum %d", total, sum)

sum 的值 55 total 的值 55 - 100 之前

考点一: 知道输出的效果是什么,且知道如何解决。 考点二: data race。因为存在多 goroutine 同时写 total 变量的问题,所以有数据竞争。 考点三: main 函数先退出了,开启的 goroutine 根本没有机会执行。