← Back to context

Comment by thomashabets2

1 day ago

Author here: I'm not talking about the value. I'm talking about the lifetime of the variable.

After checking for nil, there's no reason `err` should still be in scope. That's why it's recommended to write `if err := foo(); err != nil`, because after that, one cannot even accidentally refer to `err`.

I'm giving examples where Go syntactically does not allow you to limit the lifetime of the variable. The variable, not its value.

You are describing what happens. I have no problem with what happens, but with the language.

Why does the lifetime even matter?

  • I gave an example in the post, but to spell it out: Because a typo variable is not caught, e.g. as an unused variable.

    The example from the blog post would fail, because `return err` referred to an `err` that was no longer in scope. It would syntactically prevent accidentally writing `foo99()` instead of `err := foo99()`.