Go Synchronization and Data Races
A data race occurs when concurrent goroutines access the same memory, at least one access is a write, and the accesses are not synchronized. Go provides mutexes, atomics, channels, and the race detector to make ownership and synchronization explicit.