Unchecked exceptions in Java denote programming errors or critical unrecoverable errors.
If these are being trapped/handled it is indicative of a system with design errors. (That being said, some programming errors can be ignored/handled at the request level - indicating that the chance any particular request triggers the bug is low). > On Oct 21, 2022, at 2:30 PM, 'Daniel Lepage' via golang-nuts > <golang-nuts@googlegroups.com> wrote: > > > > That aspect of this idea seems similar to the try proposal > > (https://go.dev/issue/32437). > > Yes, I read over that proposal and the comments; it seemed like the biggest > objections were: > 1. handle() is very similar to defer/recover but not quite the same, which > could be confusing (e.g. that a defer() inside a block is just a normal > defer, while a handle() inside a block does not apply outside of that block) > 2. It's confusing to take the previous if err != nil {} blocks that were > obviously in response to the preceding line and have the actual handling code > be earlier and far away, and > 3. It would encourage people to just pass errors up without modification, > because it's easier to just add a bunch of try's to your code and use the > default handler. > > My proposal doesn't have these issues - the handler goes with the try block > so there's no separate function being deferred and no ambiguity about what > code a given handler applies to, the handle block always comes right after > the block being try'd, and there is no "default handler" - you can't use > check to avoid having any error handling, only to consolidate several error > handlers that would be identical. > > > In that issue there was considerable resistance to having flow of control > > change as part of an expression. No other part of Go works that way: flow > > of control change is always a keyword, or a call to panic which can only > > occur in statement context. > > This is not true - testing.TB.Fatal, log.Fatal, etc. affect control flow, as > do numerous expressions like nil dereferences or zero divisions, and of > course any function call that triggers any of those (and in extreme cases > like running out of memory practically ANY expression could trigger a control > flow change). > > The link I provided earlier to the Ondatra package demonstrates that > real-world Go programmers already ARE using expressions for control flow, by > (in this example) calling functions that take a testing.TB and call t.Fatal() > if anything goes wrong; the authors clearly decided that this was more > readable than using idiomatic error handling. > > I see panic/TB.Fatal as being somewhat analogous to Java's unchecked > exceptions: they change control flow without warning and you can't be sure > what functions trigger them. Errors-as-return-values is analogous to checked > exceptions: you explicitly mark things you know could go wrong and the > compiler will yell at you if you don't address those possibilities. Java's > single biggest mistake (IMO) was making unchecked exceptions easier to use > than checked exceptions - as a result many developers just didn't do any > error handling at all. Go has mostly avoided this because checking errors is > usually easier to write and read than using any of the aforementioned > unchecked methods, but the t.Fatal examples make it clear that there still > are cases where unchecked errors make code easier to read and write. I'm > proposing to fix that, not by making unchecked errors harder to use or by > turning checked errors into unchecked ones, but rather by streamlining the > worst cases in proper error checking, primarily the all-too-common case where > "if ComputeSomething(t, FetchThingOne(t), FetchThingTwo(t)) > 1" is so, so > much easier to read and write than the equivalent properly checked version > (which requires many more lines and several extra variables). > > Dan > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAAViQtjfE2FdauJ888bu1HC%2BZPPCiff5Bz5_N%3DeM2%3DVtx2fFsg%40mail.gmail.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/06DD1147-DBE3-4794-85B4-61019BBE1A40%40ix.netcom.com.