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 后面,可以接三種型別的運算式,
- 接一個條件運算式
- 接三個運算式
- 接一個 range 運算式
但其實還有第四種
- 不接運算式
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用法

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17400.html
標籤:Go
