The Throw Keyword Was a Mistake
I strongly believe that the Go approach is the correct way to go. Every function that can fail should return an error code and then the programmer invoking said function is expected to handle the error code. It also used to be that way back in the old C &#x2F; C++ days before SEH made it messy like Java.<p>And the beauty of using statically typed languages with error code return values is that one can use automated tools to find all the places where error codes are being ignored. So then random error conditions sprinkled throughout business logic go back from &quot;this is how Java is done&quot; to &quot;this is a code smell&quot;.