Commit 8aec612a authored by Rob Pike's avatar Rob Pike

for loops

comment out incomplete stuff

R=rsc
DELTA=61  (58 added, 0 deleted, 3 changed)
OCL=34278
CL=34281
parent dd7b5831
...@@ -361,7 +361,7 @@ for one-line <code>funcs</code> and the like: ...@@ -361,7 +361,7 @@ for one-line <code>funcs</code> and the like:
</p> </p>
<pre> <pre>
func CopyInBackground(src, dst chan Item) { func CopyInBackground(dst, src chan Item) {
go func() { for { dst &lt;- &lt;-src } }() go func() { for { dst &lt;- &lt;-src } }()
} }
</pre> </pre>
...@@ -385,7 +385,7 @@ case a &gt; b: ...@@ -385,7 +385,7 @@ case a &gt; b:
</pre> </pre>
<p> <p>
The grammar admits an empty statement after any statement list, which The grammar accepts an empty statement after any statement list, which
means a terminal semicolon is always OK. As a result, means a terminal semicolon is always OK. As a result,
it's fine to put semicolons everywhere you'd put them in a it's fine to put semicolons everywhere you'd put them in a
C program—they would be fine after those return statements, C program—they would be fine after those return statements,
...@@ -480,6 +480,59 @@ codeUsing(f, d); ...@@ -480,6 +480,59 @@ codeUsing(f, d);
</pre> </pre>
<h3 id="for">For</h3>
<p>
The Go <code>for</code> loop is similar to—but not the same as—C's.
It unifies <code>for</code>
and <code>while</code> and there is no <code>do-while</code>.
There are three forms, only one of which has semicolons:
</p>
<pre>
// Like a C for:
for init; condition; post { }
// Like a C while:
for condition { }
// Like a C for(;;)
for { }
</pre>
<p>
Short declarations make it easy to declare the index variable right in the loop:
</p>
<pre>
sum := 0;
for i := 0; i < 10; i++ {
sum += i
}
</pre>
<p>
If you're looping over an array, slice, string, or map a <code>range</code> clause can set
it all up for you:
</p>
<pre>
var m map[string] int;
sum := 0;
for key, value := range m { // key is unused; could call it '_'
sum += value
}
</pre>
<p>
Finally, since Go has no comma operator and <code>++</code> and <code>--</code>
are statements not expressions, if you want to run multiple variables in a <code>for</code>
you can use parallel assignment:
</p>
<pre>
// Reverse a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
</pre>
<h3 id="switch">Switch</h3> <h3 id="switch">Switch</h3>
<p> <p>
...@@ -546,6 +599,9 @@ func Compare(a, b []byte) int { ...@@ -546,6 +599,9 @@ func Compare(a, b []byte) int {
} }
</pre> </pre>
<h2>More to come</h2>
<!---
<h2 id="functions">Functions</h2> <h2 id="functions">Functions</h2>
<h3 id="omit-wrappers">Omit needless wrappers</h3> <h3 id="omit-wrappers">Omit needless wrappers</h3>
...@@ -917,6 +973,8 @@ Consistency about little things ...@@ -917,6 +973,8 @@ Consistency about little things
lets readers concentrate on big ones. lets readers concentrate on big ones.
</p> </p>
-->
</div> </div>
</body> </body>
</html> </html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment