spec: state that variable names must be unique in short var decls

Fixes #45652.

Change-Id: I5e1434480c12815369a6ce204f3729eb63139125
Reviewed-on: https://go-review.googlesource.com/c/go/+/405757
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Robert Griesemer 2022-05-11 16:21:45 -07:00
parent c01feba15d
commit 2bea43b0e7
1 changed files with 4 additions and 2 deletions

View File

@ -2761,7 +2761,7 @@ It is shorthand for a regular <a href="#Variable_declarations">variable declarat
with initializer expressions but no types:
</p>
<pre class="grammar">
<pre class="ebnf">
"var" IdentifierList = ExpressionList .
</pre>
@ -2780,12 +2780,14 @@ variables provided they were originally declared earlier in the same block
and at least one of the non-<a href="#Blank_identifier">blank</a> variables is new.
As a consequence, redeclaration can only appear in a multi-variable short declaration.
Redeclaration does not introduce a new variable; it just assigns a new value to the original.
The non-blank variable names on the left side of <code>:=</code>
must be <a href="#Uniqueness_of_identifiers">unique</a>.
</p>
<pre>
field1, offset := nextField(str, 0)
field2, offset := nextField(str, offset) // redeclares offset
a, a := 1, 2 // illegal: double declaration of a or no new variable if a was declared elsewhere
x, y, x := 1, 2, 3 // illegal: x repeated on left side of :=
</pre>
<p>