I don't prefer either. I decide on a case-by-case basis. I generally ignore
the question of scope, though. The relevant question (to me) is
readability. If the statement is short, I use the one-line version,
otherwise (or if I need to use either result after the conditional) I use
the version with a separate statement. But that's a rule-of-thumb, as I
said, I decide case by case.

On Fri, Nov 12, 2021 at 5:05 AM Kn <hit.zhang...@gmail.com> wrote:

> Hi, guys, I want to know which error handling pattern do you prefer.
> Following is a code snippet from go stdlib.
>
>
> https://sourcegraph.com/github.com/golang/go/-/blob/src/net/http/h2_bundle.go?L1848
>
> Let me simplify my questions:
>
> Pattern1: like the code in go stdlib, in the same function, we first
> declare one error variable, then in the following if-statement we use
> one-liner pattern to declare a new error variable.
>
> ```go
> func MyFunc() error {
>   v, err := doSomething()
>   if err != nil {
>     return err
>   }
>   // stuff about processing `v`
>
>   if err := doAnotherthing(); err != nil {
>     return err
>   }
>
>   // stuff about processing ...
> }
> ```
>
> I think pretty code should not only be readable but also to conform to
> same code style. So I think why not use the already declared variable
> before. Then we have the following pattern.
>
> Pattern2: Firstly doSomething() returns multiple return values and we need
> processing `v` later, so we use `v, err := doSomething()` as before. But, I
> think the `error` encountered is special compared to other local variables,
> it represents a state of current function (success or failure). So I think
> only one error variable is enough, it can be used for indicating any error,
> no matter the error is generated from `doSomething()` or
> `doAnotherthing()`.
>
> And, I didn't use the one-liner pattern which may be used for minimize the
> variable's scope. Some people think we should use one-line pattern here to
> conform to this rule.
>
> ```go
> func MyFunc() error {
>   v, err := doSomething()
>   if err != nil {
>     return err
>   }
>   // stuff about processing `v`
>
>   err := doAnotherthing()
>   if err != nil {
>     return err
>   }
>
>   // stuff about processing ...
> }
> ```
>
> Of course I know the rule to minimize the variable's scope, but I think
> error is special and consistent coding style is important and beautiful. I
> searched the go source code, these two patterns are both used.
>
> I want to know which pattern do you prefer and suggested.
>
> Thanks!
>
>
> --
> 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/2999eca8-1cc4-475c-8f85-0d2c8b966268n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/2999eca8-1cc4-475c-8f85-0d2c8b966268n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAEkBMfEc3QSnh1UoK3XPb%2BJGDg_rfhckMx051nyZf15pPenfzw%40mail.gmail.com.

Reply via email to