mirror of
https://github.com/golang/go
synced 2024-10-06 08:00:07 +00:00
spec: document range over integer expression
This CL is partly based on CL 510535. For #61405. Change-Id: Ic94f6726f9eb34313f11bec7b651921d7e5c18d4 Reviewed-on: https://go-review.googlesource.com/c/go/+/538859 Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Bypass: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
08b2f1f761
commit
e5ef484691
|
@ -1,6 +1,6 @@
|
|||
<!--{
|
||||
"Title": "The Go Programming Language Specification",
|
||||
"Subtitle": "Version of Oct 16, 2023",
|
||||
"Subtitle": "Version of Nov 1, 2023",
|
||||
"Path": "/ref/spec"
|
||||
}-->
|
||||
|
||||
|
@ -6552,8 +6552,9 @@ for { S() } is the same as for true { S() }
|
|||
|
||||
<p>
|
||||
A "for" statement with a "range" clause
|
||||
iterates through all entries of an array, slice, string or map,
|
||||
or values received on a channel. For each entry it assigns <i>iteration values</i>
|
||||
iterates through all entries of an array, slice, string or map, values received on
|
||||
a channel, or integer values from zero to an upper limit.
|
||||
For each entry it assigns <i>iteration values</i>
|
||||
to corresponding <i>iteration variables</i> if present and then executes the block.
|
||||
</p>
|
||||
|
||||
|
@ -6564,12 +6565,12 @@ RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
|
|||
<p>
|
||||
The expression on the right in the "range" clause is called the <i>range expression</i>,
|
||||
its <a href="#Core_types">core type</a> must be
|
||||
an array, pointer to an array, slice, string, map, or channel permitting
|
||||
<a href="#Receive_operator">receive operations</a>.
|
||||
an array, pointer to an array, slice, string, map, channel permitting
|
||||
<a href="#Receive_operator">receive operations</a>, or an integer.
|
||||
As with an assignment, if present the operands on the left must be
|
||||
<a href="#Address_operators">addressable</a> or map index expressions; they
|
||||
denote the iteration variables. If the range expression is a channel, at most
|
||||
one iteration variable is permitted, otherwise there may be up to two.
|
||||
denote the iteration variables. If the range expression is a channel or integer,
|
||||
at most one iteration variable is permitted, otherwise there may be up to two.
|
||||
If the last iteration variable is the <a href="#Blank_identifier">blank identifier</a>,
|
||||
the range clause is equivalent to the same clause without that identifier.
|
||||
</p>
|
||||
|
@ -6594,6 +6595,7 @@ array or slice a [n]E, *[n]E, or []E index i int a[i] E
|
|||
string s string type index i int see below rune
|
||||
map m map[K]V key k K m[k] V
|
||||
channel c chan E, <-chan E element e E
|
||||
integer n integer type I value i I
|
||||
</pre>
|
||||
|
||||
<ol>
|
||||
|
@ -6632,6 +6634,12 @@ For channels, the iteration values produced are the successive values sent on
|
|||
the channel until the channel is <a href="#Close">closed</a>. If the channel
|
||||
is <code>nil</code>, the range expression blocks forever.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
For an integer value <code>n</code>, the iteration values 0 through <code>n-1</code>
|
||||
are produced in increasing order, with the same type as <code>n</code>.
|
||||
If <code>n</code> <= 0, the loop does not run any iterations.
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<p>
|
||||
|
@ -6684,6 +6692,12 @@ for w := range ch {
|
|||
|
||||
// empty a channel
|
||||
for range ch {}
|
||||
|
||||
// call f(0), f(1), ... f(9)
|
||||
for i := range 10 {
|
||||
// type of i is int (default type for untyped constant 10)
|
||||
f(i)
|
||||
}
|
||||
</pre>
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue