Go 循環語句
Go 循環語句
一、概述
在不少實際問題中有許多具有規律性的重複操作,因此在程式中就需要重複執行某些語句。
循環程式的流程圖:
Go 語言提供了以下幾種類型循環處理語句:
循環類型 | 描述 |
---|---|
for 循環 | 重複執行語句塊 |
循環嵌套 | 循環中嵌套一個或多個 for 循環 |
1. 循環控制語句
循環控制語句可以控制循環體內語句的執行過程。
GO 語言支援以下幾種循環控制語句:
控制語句 | 描述 |
---|---|
break 語句 | 經常用於中斷當前 for 循環或跳出 switch 語句 |
continue 語句 | 跳過當前循環的剩餘語句,然後繼續進行下一輪循環。 |
goto 語句 | 將控制轉移到被標記的語句。 |
2. 無限循環
如果循環中條件語句永遠不為 false 則會進行無限循環,我們可以通過 for 循環語句中只設置一個條件表達式來執行無限循環:
示例
package main import ( "fmt" "time" ) func main() { i := 0 for true { //for後面true為可選,若不加,默認為true fmt.Printf("i: %v\n", i) i++ time.Sleep(time.Second) } } //輸出結果如下 i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 .... .... ....
二、Go 語言 for 循環
1. 語法
for 循環是一個循環控制結構,可以執行指定次數的循環
語法:
//Go 語言的 For 循環有 3 種形式,只有其中的一種使用分號
//和 C 語言的 for 一樣:
for init; condition; post { } //和 C 的 while 一樣: for condition { } //和 C 的 for(;;) 一樣: for { }
- init: 一般為賦值表達式,給控制變數賦初值
- condition: 關係表達式或邏輯表達式,循環控制條件
- post:一般為賦值表達式,給控制變數增量或減量。
2. for語句執行過程
① 先對表達式 1 賦初值;
② 判別賦值表達式 init 是否滿足給定條件,若其值為真,滿足循環條件,則執行循環體內語句,然後執行 post,進入第二次循環,再判別 condition;否則判斷 condition 的值為假,不滿足條件,就終止for循環,執行循環體外語句。
for 循環的 range 格式可以對 slice、map、數組、字元串等進行迭代循環。
格式如下:
for key, value := range oldMap { newMap[key] = value }
for 語句語法流程如下圖所示:
3. 示例
計算 1 到 10 的數字之和
package main import "fmt" func main() { sum := 0 for i := 0; i <= 10; i++ { sum += i } fmt.Printf("sum: %v\n", sum) } //輸出結果為: 55
———————————————————————————————–
//int 和 post 參數是可選的,我們可以直接省略他,類型while語句
package main import "fmt" func main() { sum := 0 i := 1 for i <= 10 { sum += i i++ } fmt.Printf("sum: %v\n", sum) }
計算0-100間偶數的和
//求出0-100的偶數和 package main import "fmt" func main() { a := 0 for i := 1; i <= 100; i++ { if i%2 == 0 { a += i } } fmt.Printf("a: %v\n", a) } //輸出結果如下 2550 -------------------------------------------------------------------------------------------- //方法二 package main import "fmt" func main() { sum := 0 for i := 0; i <= 100; i += 2 { sum += i } fmt.Printf("sum: %v\n", sum) }
4. For-each range 循環
這種格式的循環可以對字元串、數組、切片等進行迭代輸出元素
示例
//循環數組 package main import "fmt" func main() { names := []int{20, 30, 40, 50, 60} //a獲取key,b獲取value for a, b := range names { fmt.Print("key:", a, " value:", b, "\n") } } //輸出結果如下 key:0 value:20 key:1 value:30 key:2 value:40 key:3 value:50 key:4 value:60
//使用空白標識符直接獲取value package main import "fmt" func main() { names := []int{20, 30, 40, 50, 60} //a獲取key,b獲取value for _, b := range names { fmt.Print("value:", b, "\n") } } //輸出結果 value:20 value:30 value:40 value:50 value:60