Does the Go compiler not force you to handle errors
So no, it doesn't.
Hey, it's better than lurking undefined behavior and data corruption issues!
Doesn't keep your binary from crashing, though.
It does. If a function returns a Result or Option type, you can't just use its data; you have to either automatically propagate the error case upward, pattern match on both the success and error cases, or just use ".unwrap()" and explicitly choose to crash in the case of an error. There's no implicit crash like there is in a language that lets you dereference null pointers.