1.4 KiB
An aside: The last example in the previous section demonstrates a detail of how the :=
short declaration form works. The declaration that calls os.Open
reads,
f, err := os.Open(name)
This statement declares two variables, f
and err
. A few lines later, the call to f.Stat
reads,
d, err := f.Stat()
which looks as if it declares d
and err
. Notice, though, that err
appears in both statements. This duplication is legal: err
is declared by the first statement, but only re-assigned in the second. This means that the call to f.Stat
uses the existing err
variable declared above, and just gives it a new value.
In a :=
declaration a variable v
may appear even if it has already been declared, provided:
- this declaration is in the same scope as the existing declaration of
v
. ifv
is already declared in an outer scope, the declaration will create a new variable (It's worth noting here that in Go the scope of function parameters and return values is the same as the function body, even though they appear lexically outside the braces that enclose the body. ), - the corresponding value in the initialization is assignable to
v
, - there is at least one other variable that is created by the declaration.
This unusual property is pure pragmatism, making it easy to use a single err
value, for example, in a long if-else
chain. You'll see it used often.