>Something like threading race conditions is a real problem, but not easy to fix.
It is. It's called channels.
It is. It's called channels.
Rust really fixes this (with its ownership system), but it wasn't easy.
So force one to do it consciously (kind of like unsafe).
Go allows sending pointers to non-locked structures over channels, so it's quite easy to "only use channels" and still get race.
You can also hit that issue if you spawn multiple goroutines sharing the same initial lexical environment if they make use of a mutable structure from that environment.