https://www.sohamkamani.com/blog/2018/02/18/golang-data-race-and-how-to-fix-it/

Go 因其易于构建并发程序而闻名

但这些并发性可能导致可怕的数据竞争 - 如果不幸在代码中遇到它,将会经历一场最艰难调试

通过一个引起数据竞争的示例,使用 data-race 检测器工具检测竞争状况

然后,看看解决竞争条件的一些方法,同时仍然保持代码的核心逻辑完整

func main() {
    fmt.Println(getNumber())
}

func getNumber() int {
    var i int
    go func() {
        i = 5
    }()

    return i
}
  1. The value of i is being set to 5
  2. The value of i is being returned from the function

Now depending on which of these two operations completes first, our value printed will be either 0 (the default integer value) or 5.

单独的gorouting去设置i,i 返回时,不知道goroutine是否已完成

有两个正在发生的操作:

  1. i 正被设置为 5
  2. i 从函数返回

根据这两个操作