Go 系列教程 —— 9. 迴圈

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。這是 [Golang 系列教程](/subject/2)的第 9 部分。迴圈語句是用來重複執行某一段代碼。`for` 是 Go 語言唯一的迴圈語句。Go 語言中並沒有其他語言比如 C 語言中的 `while` 和 `do while` 迴圈。## for 迴圈文法```gofor initialisation; condition; post { }```初始化語句只執行一次。迴圈初始化後,將檢查迴圈條件。如果條件的計算結果為 `true` ,則 `{}` 內的迴圈體將執行,接著執行 post 語句。post 語句將在每次成功迴圈迭代後執行。在執行 post 語句後,條件將被再次檢查。如果為 `true`, 則迴圈將繼續執行,否則 for 迴圈將終止。(譯註:這是典型的 for 迴圈三個運算式,第一個為初始設定式或指派陳述式;第二個為迴圈條件判定運算式;第三個為迴圈變數修正運算式,即此處的 post )這三個組成部分,即初始化,條件和 post 都是可選的。讓我們看一個例子來更好地理解迴圈。## 例子讓我們用 `for` 迴圈寫一個列印出從 1 到 10 的程式。```gopackage mainimport ( "fmt")func main() { for i := 1; i <= 10; i++ { fmt.Printf(" %d",i) }}```[Run in playground](https://play.golang.org/p/mV6Zgcx2DY "Run in playground")在上面的程式中,i 變數被初始化為 1。條件陳述式會檢查 i 是否小於 10。如果條件成立,i 就會被列印出來,否則迴圈就會終止。迴圈語句會在每一次迴圈完成後自增 1。一旦 i 變得比 10 要大,迴圈中止。上面的程式會列印出 `1 2 3 4 5 6 7 8 9 10` 。在 `for` 迴圈中聲明的變數只能在迴圈體內訪問,因此 i 不能夠在迴圈體外訪問。## break`break` 語句用於在完成正常執行之前突然終止 for 迴圈,之後程式將會在 for 迴圈下一行代碼開始執行。讓我們寫一個從 1 列印到 5 並且使用 `break` 跳出迴圈的程式。```gopackage mainimport ( "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")}```[Run in playground](https://play.golang.org/p/sujKy92f-- "Run in playground")在上面的程式中,在迴圈過程中 i 的值會被判斷。如果 i 的值大於 5 然後 `break` 語句就會執行,迴圈就會被終止。列印語句會在 `for` 迴圈結束後執行,上面程式會輸出為```1 2 3 4 5 line after for loop ```## continue`continue` 語句用來跳出 `for` 迴圈中當前迴圈。在 `continue` 語句後的所有的 `for` 迴圈語句都不會在本次迴圈中執行。迴圈體會在一下次迴圈中繼續執行。讓我們寫一個列印出 1 到 10 並且使用 `continue` 的程式。```gopackage mainimport ( "fmt")func main() { for i := 1; i <= 10; i++ { if i%2 == 0 { continue } fmt.Printf("%d ", i) }}```[Run in playground](https://play.golang.org/p/DRLN2ZHwVS "Run in playground")在上面的程式中,這行代碼 `if i%2==0 ` 會判斷 i 除以 2 的餘數是不是 0,如果是 0,這個數字就是偶數然後執行 `continue` 語句,從而控製程序進入下一個迴圈。因此在 `continue` 後面的列印語句不會被調用而程式會進入一下個迴圈。上面程式會輸出 `1 3 5 7 9`。## 更多例子讓我們寫更多的代碼來示範 `for` 迴圈的多樣性吧下面這個程式列印出從 0 到 10 所有的偶數。```gopackage mainimport ( "fmt")func main() { i := 0 for ;i <= 10; { // initialisation and post are omitted fmt.Printf("%d ", i) i += 2 }}```[Run in playground](https://play.golang.org/p/PNXliGINku "Run in playground")正如我們已經知道的那樣,`for` 迴圈的三部分,初始化語句、條件陳述式、post 語句都是可選的。在上面的程式中,初始化語句和 post 語句都被省略了。i 在 `for` 迴圈外被初始化成了 0。只要 `i<=10` 迴圈就會被執行。在迴圈中,i 以 2 的增量自增。上面的程式會輸出 `0 2 4 6 8 10`。上面程式中 `for` 迴圈中的分號也可以省略。這個格式的 `for` 迴圈可以看作是二選一的 `for while` 迴圈。上面的程式可以被重寫成:```gopackage mainimport ( "fmt")func main() { i := 0 for i <= 10 { //semicolons are ommitted and only condition is present fmt.Printf("%d ", i) i += 2 }}```[Run in playground](https://play.golang.org/p/UYiz-Wtnoj "Run in playground")在 `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``` ```gopackage mainimport ( "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) }}```[Run in playground](https://play.golang.org/p/e7Pf0UDjj0 "Run in playground")在上面的程式中 `no` 和 `i` 被聲明然後分別被初始化為 10 和 1 。在每一次迴圈結束後 `no` 和 `i` 都自增 1 。布爾型操作符 `&&` 被用來確保 i 小於等於 10 並且 `no` 小於等於 19 。## 無限迴圈無限迴圈的文法是:```gofor { }```下一個程式就會一直列印`Hello World`不會停止。```gopackage mainimport "fmt"func main() { for { fmt.Println("Hello World") }}```如果你打算在 [go playground](https://play.golang.org/p/kYQZw1AWT4 "go playground") 裡嘗試上面的程式,你會得到一個“過程耗時太長”的錯誤。請嘗試在你本地系統上運行,來無限的列印 “Hello World” 。這裡還有一個 `range` 結構,它可以被用來在 `for` 迴圈中運算元組對象。當我們學習數組時我們會補充這方面內容。這就是 `for` 迴圈的全部內容。希望您能享受本次閱讀。請留下您寶貴的意見和建議。**上一教程 - [if-else 語句](https://studygolang.com/articles/11902)****下一教程 - [switch 語句](https://studygolang.com/articles/11957)**

via: https://golangbot.com/loops/

作者:Nick Coghlan 譯者:thxallvu 校對:polaris1119

本文由 GCTT 原創編譯,Go語言中文網 榮譽推出

本文由 GCTT 原創翻譯,Go語言中文網 首發。也想加入譯者行列,為開源做一些自己的貢獻嗎?歡迎加入 GCTT!
翻譯工作和譯文發表僅用於學習和交流目的,翻譯工作遵照 CC-BY-NC-SA 協議規定,如果我們的工作有侵犯到您的權益,請及時聯絡我們。
歡迎遵照 CC-BY-NC-SA 協議規定 轉載,敬請在本文中標註並保留原文/譯文連結和作者/譯者等資訊。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽

3001 次點擊  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.