Featured image for Data Race Patterns in Go
Image
Figure 1A: Data race due to loop index variable capture.
Image
Figure 1B: Data race due to idiomatic “err” variable capture.
Image
Figure 1C: Data race due to named return variable capture.
Image
Figure 2: Data race in slices even after using locks.
Image
Figure 3: Data race due to concurrent map access.
Image
Figure 4A: Data race due to method invocation by-reference or by-pointer.
Image
Figure 4B: sync.Mutex Lock/Unlock signature.
Image
Figure 5: Data race when mixing message passing with shared memory.
Image
Figure 6A: Data race due to incorrect WaitGroup.Add() placement.
Image
Figure 6B: Data race due to defer statement ordering leading to incorrect WaitGroup.Done() placement.
Image
Figure 7: Summary of data races.