]> Cypherpunks repositories - gostls13.git/commitdiff
string range
authorRob Pike <r@golang.org>
Wed, 9 Sep 2009 00:11:57 +0000 (17:11 -0700)
committerRob Pike <r@golang.org>
Wed, 9 Sep 2009 00:11:57 +0000 (17:11 -0700)
R=rsc
DELTA=22  (19 added, 0 deleted, 3 changed)
OCL=34463
CL=34463

doc/effective_go.html

index 740c1cf8e9e813673410602b56e225de221acb57..becfd17b2abbfd669c85bdb130167e2df33f0ab5 100644 (file)
@@ -489,10 +489,10 @@ 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:
+// Like a C for
 for init; condition; post { }
 
-// Like a C while:
+// Like a C while
 for condition { }
 
 // Like a C for(;;)
@@ -521,10 +521,29 @@ for key, value := range m {  // key is unused; could call it '_'
 }
 </pre>
 
+<p>
+For strings, the <code>range</code> does more of the work for you, breaking out individual
+characters by parsing the UTF-8 (erroneous encodings consume one byte and produce the
+replacement rune U+FFFD). The loop
+</p>
+<pre>
+for pos, char := range "日本語" {
+    fmt.Printf("character %c starts at byte position %d\n", char, pos)
+}
+</pre>
+<p>
+prints
+</p>
+<pre>
+character 日 starts at byte position 0
+character 本 starts at byte position 3
+character 語 starts at byte position 6
+</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:
+you should use parallel assignment:
 </p>
 <pre>
 // Reverse a