正如上文中说到的那样,数据竞争问题难以发现。假如读者间接运转测试代码TestRemove100次,极大略率会发现100次运转的后果均正确。然而,Remove办法仍然存在产生问题的可能性,a.Records的长度为3,在经过Remove办法删去2个记载后,正常状况下,残余的记载数量为1,当数据竞争产生时,残余的记载数量就会为2。经过代码Review,能够发现当Remove中两个goroutine产生数据竞争时,可能会致使某个删除操作被掩盖掉,从而产犯错误的后果。
经过go test -race -run=TestRemove,咱们能够分明地看到可能产生的数据竞争的各种状况。