因为之前博主碰到过一个笔试题,里面就有提到data race数据竞争,之前没听过这个概念,所以就特地去了解了一下
1.首先在golang中使用data race竞争工具,需要去环境变量中设置CGO_ENABLED="1"才能使用
2.开启后便可以直接使用,先把加锁代码注释

var (
	tempSlice []string            // Server维护的数据结构
	lock sync.Mutex //互斥锁
)

func main() {
	for i := 0; i < 10; i++ {
		go Server(strconv.Itoa(i))
	}
	time.Sleep(time.Second)
}
func Server(str string) {
	// 因为slice在golang中不是并发安全,所以使用Mutex实现并发安全
	//lock.Lock()
	tempSlice = append(tempSlice, str)
	fmt.Println("这是第", str,"次请求:",tempSlice)
	//lock.Unlock()
}

这段代码,10个协程同时去动态添加切片,肯定会有并发安全问题,在命令行直接执行go run -race main.go就可以进行数据竞争检测
在这里插入图片描述
3.当我们把加锁代码注释取消后再次执行

在这里插入图片描述
以上就是一个针对数据竞争非常简单的例子