Sorry, but I disagree, at least in the context of Go, and the difference 
between errors and panics. Imagine any financial service, if the code is 
encountering a condition it deems should be impossible, yet is occurring, bad 
things will happen. Very old adage, garbage in = garbage out. 

> On Feb 8, 2019, at 11:43 PM, Ivan Bertona <i...@ibrt.me> wrote:
> 
> Recovering from panics is a common and IMO perfectly acceptable practice... 
> For example in a web server where you do not want a panic that occurs while 
> handling a request to affect other request, especially ones that are in 
> flight.
> 
>> On Fri, Feb 8, 2019 at 10:47 PM Robert Engels <reng...@ix.netcom.com> wrote:
>> The way Go is designed a panic must terminate the application. Anything else 
>> is so indeterminate to be unusable. 
>> 
>>> On Feb 8, 2019, at 8:08 PM, Michael Jones <michael.jo...@gmail.com> wrote:
>>> 
>>> Agree to that. 
>>> 
>>> From the original blog post: 
>>> 
>>> The convention in the Go libraries is that even when a package uses panic 
>>> internally, its external API still presents explicit error return values.
>>> 
>>> But yes, agree with the problem in the situation that you describe 
>>> 
>>>> On Fri, Feb 8, 2019 at 4:24 PM Ivan Bertona <i...@ibrt.me> wrote:
>>>> What's suboptimal with the first one (or the second one) is that if 
>>>> performOperation1() panics the lock will not be released. It may or may 
>>>> not be a problem depending on the situation. Your assessment of defer used 
>>>> with locks is correct - it works well only if the lock doesn't need to be 
>>>> released before the end of the function - but in my experience you can 
>>>> always extract a function to achieve that. If you can't, it's usually a 
>>>> sign that the code needs some reworking.
>>>> 
>>>>> On Friday, February 8, 2019 at 7:03:28 PM UTC-5, Michael Jones wrote:
>>>>> I don’t see anything suboptimal about the first one. 
>>>>> 
>>>>> Defer is a function-scope magic thing. 
>>>>> 
>>>>> Go designers chose not to have lexical scope magic, so you would either 
>>>>> force function scope (prior answer) or be happy with the normal code. 
>>>>> 
>>>>>> On Fri, Feb 8, 2019 at 10:31 AM Burak Serdar <bse...@ieee.org> wrote:
>>>>>> On Fri, Feb 8, 2019 at 11:28 AM vincent163 <hwy14...@gmail.com> wrote:
>>>>>> >
>>>>>> > I am thinking about how to write programs like this:
>>>>>> > lock1.Lock()
>>>>>> > err = performOperation1()
>>>>>> > if err != nil {
>>>>>> >   lock1.Unlock()
>>>>>> >   return err
>>>>>> > }
>>>>>> > lock1.Unlock()
>>>>>> > performExpensiveOperation2()
>>>>>> 
>>>>>> How about this:
>>>>>> 
>>>>>> lock1.Lock()
>>>>>> err = performOperation1()
>>>>>> lock1.Unlock()
>>>>>> if err != nil {
>>>>>>   return err
>>>>>> }
>>>>>> performExpensiveOperation2()
>>>>>> 
>>>>>> 
>>>>>> >
>>>>>> >
>>>>>> > The lock1 must be locked while performing operation1, and I need to 
>>>>>> > use its result to perform operation2. Since operation2 is expensive, I 
>>>>>> > don't want to hold the lock while performing it, and lock1.Unlock() 
>>>>>> > needs to be called before calling operation2.
>>>>>> > Go's defer mechanism doesn't seem to handle this case well since the 
>>>>>> > resource is used only within a block and not throughout the function. 
>>>>>> > Is there a recommended way to write programs in this case?
>>>>>> > I know I could wrap the lock block in a closure, but that creates a 
>>>>>> > completely new scope, so I can't return directly or break out of a 
>>>>>> > loop within the closure, etc.
>>>>>> >
>>>>>> > --
>>>>>> > 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...@googlegroups.com.
>>>>>> > For more options, visit https://groups.google.com/d/optout.
>>>>>> 
>>>>>> -- 
>>>>>> 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...@googlegroups.com.
>>>> 
>>>>>> 
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>> -- 
>>>>> Michael T. Jones
>>>>> michae...@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.
>>>> For more options, visit https://groups.google.com/d/optout.
>>> -- 
>>> Michael T. Jones
>>> michael.jo...@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.
>>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> 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.
> For more options, visit https://groups.google.com/d/optout.

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to