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(;;)
}
</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