1. 程式人生 > >Golang從入門到精通(六):Golang控制語句之for

Golang從入門到精通(六):Golang控制語句之for

for結構介紹

Go語言只有for迴圈這一種迴圈結構。

基本的for迴圈包含三個由分號分開的組成部分:

1.初始化語句:在第一次迴圈執行前被執行
2.迴圈條件表示式:每輪迭代開始前被求值
3.後置語句:每輪迭代後被執行

初始化語句一般是一個短變數宣告,這裡宣告的變數僅在整個 for 迴圈語句可見。

如果條件表示式的值變為 false,那麼迭代將終止。

注意:不像 C,Java,或者 Javascript 等其他語言,Go語言中的for迴圈語句的三個部分不需要用括號括起來,但迴圈體必須用 { } 括起來。

基於計數器的for迴圈

基於計數器的迭代,基本形式為:

for
初始化語句; 條件語句; 修飾語句 { //迴圈語句 }

我們用for迴圈來計算10以內正整數的和。

package main

import(
  "fmt"
  )

func main() {
    sum := 0
    for i := 0; i < 10; i++ {
        sum += i
    }
    fmt.Println(sum)
}

由花括號括起來的程式碼塊會被重複執行已知次數,該次數是根據計數器(此例為 i)決定的。迴圈開始前,會執行且僅會執行一次初始化語句 i := 0;,這比在迴圈之前宣告更為簡短。緊接著的是條件語句 i < 10;

,在每次迴圈開始前都會進行判斷,一旦判斷結果為 false,則退出迴圈體。最後一部分為修飾語句 i++,一般用於增加或減少計數器。

這三部分組成的迴圈的頭部,它們之間使用分號 ; 相隔,但並不需要括號 () 將它們括起來。例如:

for (i = 0; i < 10; i++) { } //非法程式碼!

所示是非法的程式碼!

和if-else語句類似,for迴圈中左花括號{必須和 for 語句在同一行,計數器的生命週期在遇到右花括號} 時便終止。一般習慣使用 i、j、z 或 ix 等較短的名稱命名計數器。

基於條件判斷的for迴圈

for 迴圈的第二種形式是沒有頭部的條件判斷(類似其它語言中的 while 迴圈),基本形式為:

for 條件語句 {}

也可以認為這是沒有初始化語句和修飾語句的 for 結構,因此 ;;便是多餘的了。

我們來寫一個基於條件判斷的簡單for迴圈,示例程式碼如下:

package main

import "fmt"

func main() {
    var i int = 5

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

for-range結構

提到for迴圈,我們必須再提一下range()這個內建函式,這是 Go 語言特有的一種的迭代結構,它一般用來遍歷陣列,slice和map等集合。

我們用range來遍歷一個數組,以下程式碼會打印出每個值的序號和對應的值。

package main

import(
  "fmt"
  )

func main() {
  arr := [...]int{6, 7, 8}
  for i, v := range arr {
        fmt.Println(i,v)
    }
}

輸出:

0 6
1 7
2 8

無限迴圈

Go 語言有以下幾種無限迴圈:

i:=0; ; i++   
for { }       
for ;; { }    
for true { }  

這些無限迴圈都是 for 迴圈的條件語句被省略了。如果 for 迴圈的頭部沒有條件語句,那麼就會認為條件永遠為 true。因此如果不想造成死迴圈,迴圈體內必須有相關的條件判斷以確保會在某個時刻退出迴圈。