Btw, before someone gets the wrong impression. You might trap the panic in a 
web container, rather than terminating the process, but every request should 
just auto respond with a 500 error. You might need the server live to perform 
critical error analysis, but even then the best solution is probably to core 
dump, and auto start a backup process that responds with a 500 error. Still in 
a cloud app with multiple instances you could have the same problem in multiple 
installs just waiting to occur there. Most likely you need to perform a mass 
rollback or update. 

I didn’t mean to suggest that it was a trivial problem with a trivial solution. 

> On Feb 9, 2019, at 12:48 AM, Robert Engels <reng...@ix.netcom.com> wrote:
> 
> 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.

-- 
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