循環語句是用來重複執行某一段代碼。數組
for
是 Go 語言惟一的循環語句。Go 語言中並無其餘語言好比 C 語言中的 while
和 do while
循環。ide
for initialisation; condition; post { }
初始化語句只執行一次。循環初始化後,將檢查循環條件。若是條件的計算結果爲 true
,則 {}
內的循環體將執行,接着執行 post 語句。post 語句將在每次成功循環迭代後執行。在執行 post 語句後,條件將被再次檢查。若是爲 true
, 則循環將繼續執行,不然 for 循環將終止。(譯註:這是典型的 for 循環三個表達式,第一個爲初始化表達式或賦值語句;第二個爲循環條件斷定表達式;第三個爲循環變量修正表達式,即此處的 post )oop
這三個組成部分,即初始化,條件和 post 都是可選的。讓咱們看一個例子來更好地理解循環。post
讓咱們用 for
循環寫一個打印出從 1 到 10 的程序。學習
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { fmt.Printf(" %d",i) } }
在上面的程序中,i 變量被初始化爲 1。條件語句會檢查 i 是否小於 10。若是條件成立,i 就會被打印出來,不然循環就會終止。循環語句會在每一次循環完成後自增 1。一旦 i 變得比 10 要大,循環停止。code
上面的程序會打印出 1 2 3 4 5 6 7 8 9 10
。對象
在 for
循環中聲明的變量只能在循環體內訪問,所以 i 不可以在循環體外訪問。ip
break
語句用於在完成正常執行以前忽然終止 for 循環,以後程序將會在 for 循環下一行代碼開始執行。rem
讓咱們寫一個從 1 打印到 5 而且使用 break
跳出循環的程序。it
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { if i > 5 { break //loop is terminated if i > 5 } fmt.Printf("%d ", i) } fmt.Printf("\nline after for loop") }
在上面的程序中,在循環過程當中 i 的值會被判斷。若是 i 的值大於 5 而後 break
語句就會執行,循環就會被終止。打印語句會在 for
循環結束後執行,上面程序會輸出爲
1 2 3 4 5 line after for loop
continue
語句用來跳出 for
循環中當前循環。在 continue
語句後的全部的 for
循環語句都不會在本次循環中執行。循環體會在一下次循環中繼續執行。
讓咱們寫一個打印出 1 到 10 而且使用 continue
的程序。
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { if i%2 == 0 { continue } fmt.Printf("%d ", i) } }
在上面的程序中,這行代碼 if i%2==0
會判斷 i 除以 2 的餘數是否是 0,若是是 0,這個數字就是偶數而後執行 continue
語句,從而控制程序進入下一個循環。所以在 continue
後面的打印語句不會被調用而程序會進入一下個循環。上面程序會輸出 1 3 5 7 9
。
讓咱們寫更多的代碼來演示 for
循環的多樣性吧
下面這個程序打印出從 0 到 10 全部的偶數。
package main import ( "fmt" ) func main() { i := 0 for ;i <= 10; { // initialisation and post are omitted fmt.Printf("%d ", i) i += 2 } }
正如咱們已經知道的那樣,for
循環的三部分,初始化語句、條件語句、post 語句都是可選的。在上面的程序中,初始化語句和 post 語句都被省略了。i 在 for
循環外被初始化成了 0。只要 i<=10
循環就會被執行。在循環中,i 以 2 的增量自增。上面的程序會輸出 0 2 4 6 8 10
。
上面程序中 for
循環中的分號也能夠省略。這個格式的 for
循環能夠看做是二選一的 for while
循環。上面的程序能夠被重寫成:
package main import ( "fmt" ) func main() { i := 0 for i <= 10 { //semicolons are ommitted and only condition is present fmt.Printf("%d ", i) i += 2 } }
在 for
循環中能夠聲明和操做多個變量。讓咱們寫一個使用聲明多個變量來打印下面序列的程序。
10 * 1 = 10 11 * 2 = 22 12 * 3 = 36 13 * 4 = 52 14 * 5 = 70 15 * 6 = 90 16 * 7 = 112 17 * 8 = 136 18 * 9 = 162 19 * 10 = 190 package main import ( "fmt" ) func main() { for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { //multiple initialisation and increment fmt.Printf("%d * %d = %d\n", no, i, no*i) } }
在上面的程序中 no
和 i
被聲明而後分別被初始化爲 10 和 1 。在每一次循環結束後 no
和 i
都自增 1 。布爾型操做符 &&
被用來確保 i 小於等於 10 而且 no
小於等於 19 。
無限循環的語法是:
for { }
下一個程序就會一直打印Hello World
不會中止。
package main import "fmt" func main() { for { fmt.Println("Hello World") } }
在你本地系統上運行,來無限的打印 「Hello World」 。
這裏還有一個 range
結構,它能夠被用來在 for
循環中操做數組對象。當咱們學習數組時咱們會補充這方面內容。