I did not see clear and simple either.  As I wrote, I don't like complex 
solutions. Just trying to ask: why we don't have simple solution. The 
function just simple example, this isn't a draft or something.

On Friday, 31 July 2020 at 23:25:26 UTC+3 b.ca...@pobox.com wrote:

> On Friday, 31 July 2020 15:06:33 UTC+1, semi...@gmail.com wrote:
>>
>> I know, there are so many discussion about error handling. I read tons of 
>> idea about that. Looks like most of idea rejected from community but every 
>> idea brings our goal closer.
>>
>
> The more I use go's existing error handling, the more I like it.
>
> It's clear and it's explicit.  Could a function return an error, or not? 
> It's right there in the function signature.  It's something you can't 
> ignore.
>
>     foo := func()        // fails to compile if foo returns two values
>     foo, err := func()   // OK, but will fail if you don't use the 'err' 
> value
>     foo, _ := func()     // explicitly ignore the error: a big code smell 
> signal
>  
> You then make a decision as to what to do.  Should I just return from my 
> own function and let the error propagate up unchanged?  Should I propagate 
> a new error which wraps or replaces the original error?  Should I do 
> something else?
>
> There have been dozens of proposals for changing it, and I've not seen one 
> which is as clear or as simple.
>
> For your "throws func" - you didn't describe the semantics.  I am guessing 
> it is intended to be equivalent to the following?
>
> func myFileRDWRFunc(filename string) (string, error) {
>     f, err := os.OpenFile(filename, os.O_RDWR, 0600)
>     if err != nil { // backward compatibility (??)
>         return "", err
>     }
>
>     err = f.WriteString("anystring")
>     if err != nil {
>         log.Println(err)
>         f.Close()
>         return "", err
>     }
>
>     err = f.Seek(0, 0)
>     if err != nil {
>         log.Println(err)
>         f.Close()
>         return "", err
>     }
>
>     b, err := ioutil.ReadAll(f)
>     if err != nil {
>         log.Println(err)
>         f.Close()
>         return "", err
>     }
>
>     return string(b), nil
> }
>
> That is: I think you're saying IF there's a multi-valued function return, 
> AND the last value is an error, THEN it will silently consume that value, 
> and jump to the handler if not nil.  Is that correct?  What about functions 
> which return multiple values but the last one is not an error?  What 
> happens if the handler doesn't have a "return" statement - does it continue 
> where it left off??
>
> Aside: I don't think putting f.Close() in the error handler is right.  
> There should be "defer f.Close()" as soon as the file has been opened - so 
> that it is closed both in normal and error conditions.
>

-- 
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/2c661dd6-5c2c-4156-be01-3bb7bef9852bn%40googlegroups.com.

Reply via email to