如果想要重复执行某些语句, 只有 for结构可以使用。不过不用担心,for结构非常灵活。
但是,其它许多语言中也没有发现和 do while 完全对等的 for 结构,可能是因为这种需求并不是那么强烈

那么接下来就是for结构的各种使用方式了

基于计数器的迭代


书写格式

  1. for i := 0; i < 5; i++ {
  2. fmt.Printf("This is the %d iteration\n", i)
  3. }

注意事项

  • { 必须和for语句在同一行
  • 可以使用多个计数器for i, j := 0, N; i < j; i, j = i+1, j-1 {}
  • 关于字符的迭代一定要注意,Go的字符串是unicode编码,对使用了非ASCII编码的字符的字符串迭代很可能发生错误(不过存在解决方案)

    基于条件判断的迭代

    类似while循环


格式

  1. var i int = 5
  2. for i >= 0 {
  3. i = i - 1
  4. fmt.Printf("The variable i is now: %d\n", i)
  5. }

无限循环


格式

  1. for ;; {
  2. }
  3. for {
  4. }
  5. for i := 0;;i++{
  6. }
  7. for t, err = p.Token(); err == nil; t, err = p.Token() {
  8. ...
  9. }

可以使用

  • break 退出循环体
  • return 对函数进行返回

    for-range结构


for-range结构可以迭代任何一个集合,包括了数组和map。语法类似for-each,且可以获得每次迭代所对应的索引,形式为 for pos, val := range coll { } 。值得注意的是, val 是对应索引的值拷贝,当然,如果 val 为指针,则可以修改集合中的原值

一个字符串是unicode编码的字符(或者说 rune )集合,每个 rune 字符和索引在for-range中是一一对应的,可以根据UTF-8规则自动识别unicode编码的字符, 因此可以用来迭代字符串