If I have something like this
Case 1:
if str, err := m.something(); err != nil {
return err
}
fmt.Println(str) //str is undefined variable
Case 2:
str, err := m.something();
fmt.Println(str) //str is ok
My question is why does the scope of the variable str
change when its used in a format like this
if str, err := m.something(); err != nil {
return err
//str scope ends
}
CodePudding user response:
Because if
statements (and for
, and switch
) are implicit blocks, according to the language spec, and :=
is for both declaration and assignment. If you want str
to be available after the if
, you could declare the variables first, and then assign to them in the if statement:
var s string
var err error
if str, err = m.something(); err != nil
// ...