From 956926ee31af1d7901d9e04c7eeab2c84aa8b212 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Wed, 7 Apr 2010 16:03:12 -0700 Subject: [PATCH] Language FAQ: update the entry on exceptions. R=rsc, iant CC=golang-dev https://golang.org/cl/824045 --- doc/go_lang_faq.html | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/doc/go_lang_faq.html b/doc/go_lang_faq.html index 1a8ffcf030..2fd71936ba 100644 --- a/doc/go_lang_faq.html +++ b/doc/go_lang_faq.html @@ -282,20 +282,19 @@ This remains an open issue.

Why does Go not have exceptions?

-Exceptions are a similar story. A number of designs for exceptions -have been proposed but each adds significant complexity to the -language and run-time. By their very nature, exceptions span functions and -perhaps even goroutines; they have wide-ranging implications. There -is also concern about the effect they would have on the -libraries. They are, by definition, exceptional yet experience with -other languages that support them show they have profound effect on -library and interface specification. It would be nice to find a design -that allows them to be truly exceptional without encouraging common -errors to turn into special control flow that requires every programmer to -compensate. -

-

-Like generics, exceptions remain an open issue. +We believe that coupling the usual idea of exceptions to a control +structure, as in the try-catch-finally idiom, results in +convoluted code. It also tends to encourage programmers to label +too many ordinary errors, such as failing to open a file, as +exceptional. And then the type system gets mixed in. +

+

+Go takes a different approach. Instead of exceptions, it has couple +of built-in functions to signal and recover from truly exceptional +conditions. The recovery mechanism is executed only as part of a +function's state being torn down after an error, which is sufficient +to handle catastrophe but requires no extra control structures and, +when used well, can result in clean error-handling code.

-- 2.50.0