]> Cypherpunks repositories - gostls13.git/commitdiff
for loops
authorRob Pike <r@golang.org>
Wed, 2 Sep 2009 23:41:41 +0000 (16:41 -0700)
committerRob Pike <r@golang.org>
Wed, 2 Sep 2009 23:41:41 +0000 (16:41 -0700)
comment out incomplete stuff

R=rsc
DELTA=61  (58 added, 0 deleted, 3 changed)
OCL=34278
CL=34281

doc/effective_go.html

index b79f2a7a5c4d36c8a34dee4a45f650e962bc7b66..740c1cf8e9e813673410602b56e225de221acb57 100644 (file)
@@ -361,7 +361,7 @@ for one-line <code>funcs</code> and the like:
 </p>
 
 <pre>
-func CopyInBackground(src, dst chan Item) {
+func CopyInBackground(dst, src chan Item) {
     go func() { for { dst &lt;- &lt;-src } }()
 }
 </pre>
@@ -385,7 +385,7 @@ case a &gt; b:
 </pre>
 
 <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,
 it's fine to put semicolons everywhere you'd put them in a
 C program—they would be fine after those return statements,
@@ -480,6 +480,59 @@ codeUsing(f, d);
 </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>
 
 <p>
@@ -546,6 +599,9 @@ func Compare(a, b []byte) int {
 }
 </pre>
 
+<h2>More to come</h2>
+
+<!---
 <h2 id="functions">Functions</h2>
 
 <h3 id="omit-wrappers">Omit needless wrappers</h3>
@@ -917,6 +973,8 @@ Consistency about little things
 lets readers concentrate on big ones.
 </p>
 
+-->
+
 </div>
 </body>
 </html>