10. Go 語言流程控制:for 循環


Hi,大家好,我是明哥。

在自己學習 Golang 的這段時間里,我寫了詳細的學習筆記放在我的個人微信公眾號 《Go編程時光》,對於 Go 語言,我也算是個初學者,因此寫的東西應該會比較適合剛接觸的同學,如果你也是剛學習 Go 語言,不防關注一下,一起學習,一起成長。

我的在線博客:http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime


Go里的流程控制方法還是挺豐富,整理了下有如下這么多種:

  • if - else 條件語句
  • switch - case 選擇語句
  • for - range 循環語句
  • goto 無條件跳轉語句
  • defer 延遲執行

上一篇講了switch - case 選擇語句,今天先來講講 for 循環語句。

0. 語句模型

這是 for 循環的基本模型。

for [condition |  ( init; condition; increment ) | Range]
{
   statement(s);
}

可以看到 for 后面,可以接三種類型的表達式。

  1. 接一個條件表達式
  2. 接三個表達式
  3. 接一個 range 表達式

但其實還有第四種

  1. 不接表達式

1. 接一個條件表達式

這個例子會打印 1 到 5 的數值。

a := 1
for a <= 5 {
	fmt.Println(a)
	a ++ 
}

輸出如下

1
2
3
4
5

2. 接三個表達式

for 后面,緊接着三個表達式,使用 ; 分隔。

這三個表達式,各有各的用途

  • 第一個表達式:初始化控制變量,在整個循環生命周期內,只運行一次;
  • 第二個表達式:設置循環控制條件,當返回true,繼續循環,返回false,結束循環;
  • 第三個表達式:每次循完開始(除第一次)時,給控制變量增量或減量。

這邊的例子和上面的例子,是等價的。

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
}

輸出如下

1
2
3
4
5

2. 不接表達式:無限循環

在 Go 語言中,沒有 while 循環,如果要實現無限循環,也完全可以 for 來實現。

當你不加任何的判斷條件時, 就相當於你每次的判斷都為 true,程序就會一直處於運行狀態,但是一般我們並不會讓程序處於死循環,在滿足一定的條件下,可以使用關鍵字 break 退出循環體,也可以使用 continue 直接跳到下一循環。

下面兩種寫法都是無限循環的寫法。

for {
    代碼塊
}

// 等價於
for ;; {
    代碼塊
}

舉個例子

import "fmt"

func main() {
	var i int = 1
	for {
		if i > 5 {
			break
		}
		fmt.Printf("hello, %d\n", i)
		i++
	}
}

輸出如下

hello, 1
hello, 2
hello, 3
hello, 4
hello, 5

3. 接 for-range 語句

遍歷一個可迭代對象,是一個很常用的操作。在 Go 可以使用 for-range 的方式來實現。

range 后可接數組、切片,字符串等

由於 range 會返回兩個值:索引和數據,若你后面的代碼用不到索引,需要使用 _ 表示 。

import "fmt"

func main() {
	myarr := [...]string{"world", "python", "go"}
	for _, item := range myarr {
		fmt.Printf("hello, %s\n", item)
	}
}

輸出如下

hello, world
hello, python
hello, go

系列導讀

01. 開發環境的搭建(Goland & VS Code)

02. 學習五種變量創建的方法

03. 詳解數據類型:****整形與浮點型

04. 詳解數據類型:byte、rune與string

05. 詳解數據類型:數組與切片

06. 詳解數據類型:字典與布爾類型

07. 詳解數據類型:指針

08. 面向對象編程:結構體與繼承

09. 一篇文章理解 Go 里的函數

10. Go語言流程控制:if-else 條件語句

11. Go語言流程控制:switch-case 選擇語句

12. Go語言流程控制:for 循環語句

13. Go語言流程控制:goto 無條件跳轉

14. Go語言流程控制:defer 延遲調用

15. 面向對象編程:接口與多態

16. 關鍵字:make 和 new 的區別?

17. 一篇文章理解 Go 里的語句塊與作用域

18. 學習 Go 協程:goroutine

19. 學習 Go 協程:詳解信道/通道

20. 幾個信道死鎖經典錯誤案例詳解

21. 學習 Go 協程:WaitGroup

22. 學習 Go 協程:互斥鎖和讀寫鎖

23. Go 里的異常處理:panic 和 recover

24. 超詳細解讀 Go Modules 前世今生及入門使用

25. Go 語言中關於包導入必學的 8 個知識點

26. 如何開源自己寫的模塊給別人用?

27. 說說 Go 語言中的類型斷言?

28. 這五點帶你理解Go語言的select用法



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM