Go語言中循環(huán)語句使用的示例詳解
一、概述
在不少實(shí)際問題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語句。
循環(huán)程序的流程圖:
Go 語言提供了以下幾種類型循環(huán)處理語句:
循環(huán)類型 | 描述 |
---|---|
for 循環(huán) | 重復(fù)執(zhí)行語句塊 |
循環(huán)嵌套 | 循環(huán)中嵌套一個(gè)或多個(gè) for 循環(huán) |
1. 循環(huán)控制語句
循環(huán)控制語句可以控制循環(huán)體內(nèi)語句的執(zhí)行過程。
GO 語言支持以下幾種循環(huán)控制語句:
控制語句 | 描述 |
---|---|
break 語句 | 經(jīng)常用于中斷當(dāng)前 for 循環(huán)或跳出 switch 語句 |
continue 語句 | 跳過當(dāng)前循環(huán)的剩余語句,然后繼續(xù)進(jìn)行下一輪循環(huán) |
goto 語句 | 將控制轉(zhuǎn)移到被標(biāo)記的語句 |
2. 無限循環(huán)
如果循環(huán)中條件語句永遠(yuǎn)不為 false 則會(huì)進(jìn)行無限循環(huán),我們可以通過 for 循環(huán)語句中只設(shè)置一個(gè)條件表達(dá)式來執(zhí)行無限循環(huán):
示例
package main import ( "fmt" "time" ) func main() { i := 0 for true { //for后面true為可選,若不加,默認(rèn)為true fmt.Printf("i: %v\n", i) i++ time.Sleep(time.Second) } }
輸出結(jié)果如下
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
二、Go 語言 for 循環(huán)
1. 語法
for 循環(huán)是一個(gè)循環(huán)控制結(jié)構(gòu),可以執(zhí)行指定次數(shù)的循環(huán)
語法:
//Go 語言的 For 循環(huán)有 3 種形式,只有其中的一種使用分號(hào)
//和 C 語言的 for 一樣:
for init; condition; post { } //和 C 的 while 一樣: for condition { } //和 C 的 for(;;) 一樣: for { }
init: 一般為賦值表達(dá)式,給控制變量賦初值
condition: 關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件
post:一般為賦值表達(dá)式,給控制變量增量或減量。
2. for語句執(zhí)行過程
① 先對(duì)表達(dá)式 1 賦初值;
② 判別賦值表達(dá)式 init 是否滿足給定條件,若其值為真,滿足循環(huán)條件,則執(zhí)行循環(huán)體內(nèi)語句,然后執(zhí)行 post,進(jìn)入第二次循環(huán),再判別 condition;否則判斷 condition 的值為假,不滿足條件,就終止for循環(huán),執(zhí)行循環(huán)體外語句。
for 循環(huán)的 range 格式可以對(duì) slice、map、數(shù)組、字符串等進(jìn)行迭代循環(huán)。
格式如下:
for key, value := range oldMap { newMap[key] = value }
for 語句語法流程如下圖所示:
3. 示例
計(jì)算 1 到 10 的數(shù)字之和
package main import "fmt" func main() { sum := 0 for i := 0; i <= 10; i++ { sum += i } fmt.Printf("sum: %v\n", sum) }
輸出結(jié)果為:
55
int 和 post 參數(shù)是可選的,我們可以直接省略他,類型while語句
package main import "fmt" func main() { sum := 0 i := 1 for i <= 10 { sum += i i++ } fmt.Printf("sum: %v\n", sum) }
計(jì)算0-100間偶數(shù)的和
//求出0-100的偶數(shù)和 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) }
輸出結(jié)果如下
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 循環(huán)
這種格式的循環(huán)可以對(duì)字符串、數(shù)組、切片等進(jìn)行迭代輸出元素
示例
//循環(huán)數(shù)組 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") } }
輸出結(jié)果如下
key:0 value:20
key:1 value:30
key:2 value:40
key:3 value:50
key:4 value:60
//使用空白標(biāo)識(shí)符直接獲取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") } }
輸出結(jié)果
value:20
value:30
value:40
value:50
value:60
三、循環(huán)嵌套
Go 語言允許用戶在循環(huán)內(nèi)使用循環(huán)
1. 語法
以下為 Go 語言嵌套循環(huán)的格式:
for [condition | ( init; condition; increment ) | Range] { for [condition | ( init; condition; increment ) | Range] { statement(s); } statement(s); }
2. 示例
以下實(shí)例使用循環(huán)嵌套來輸出 2 到 100 間的素?cái)?shù):
package main import "fmt" func main() { /* 定義局部變量 */ var i, j int for i=2; i < 100; i++ { for j=2; j <= (i/j); j++ { if(i%j==0) { break; // 如果發(fā)現(xiàn)因子,則不是素?cái)?shù) } } if(j > (i/j)) { fmt.Printf("%d 是素?cái)?shù)\n", i); } } }
輸出結(jié)果如下
2 是素?cái)?shù)
3 是素?cái)?shù)
5 是素?cái)?shù)
7 是素?cái)?shù)
11 是素?cái)?shù)
13 是素?cái)?shù)
17 是素?cái)?shù)
19 是素?cái)?shù)
23 是素?cái)?shù)
29 是素?cái)?shù)
31 是素?cái)?shù)
37 是素?cái)?shù)
41 是素?cái)?shù)
43 是素?cái)?shù)
47 是素?cái)?shù)
53 是素?cái)?shù)
59 是素?cái)?shù)
61 是素?cái)?shù)
67 是素?cái)?shù)
71 是素?cái)?shù)
73 是素?cái)?shù)
79 是素?cái)?shù)
83 是素?cái)?shù)
89 是素?cái)?shù)
97 是素?cái)?shù)
99乘法表:
package main import "fmt" func main() { for i := 1; i < 10; i++ { for j := 1; j < i+1; j++ { fmt.Printf("%d * %d = %d\t", i, j, j*i) } fmt.Println() } }
輸出結(jié)果如下
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
四、break 語句
1. 語法
Go 語言中 break 語句用于以下兩方面:
用于循環(huán)語句中跳出循環(huán),并開始執(zhí)行循環(huán)之后的語句。
break 在 switch(開關(guān)語句)中在執(zhí)行一條 case 后跳出語句的作用。
在多重循環(huán)中,可以用標(biāo)號(hào) label 標(biāo)出想 break 的循環(huán)。
break 語法格式如下:
break;
流程如圖:
2. 示例
在變量 a 大于 15 的時(shí)候跳出循環(huán):
package main import "fmt" func main() { var a int = 10 for a < 20 { fmt.Printf("a: %v\n", a) a++ if a > 15 { break } } }
執(zhí)行結(jié)果如下
a: 10
a: 11
a: 12
a: 13
a: 14
a: 15
演示使用標(biāo)記和不使用標(biāo)記的區(qū)別
package main import "fmt" func main() { //不適用標(biāo)記 fmt.Println("----break----") for i := 1; i <= 3; i++ { fmt.Printf("i: %v\n", i) for a := 11; a <= 13; a++ { fmt.Printf("a: %v\n", a) break } } //使用標(biāo)記 fmt.Println("----break label----") fla: for i := 1; i <= 3; i++ { fmt.Printf("i: %v\n", i) for a := 11; a <= 13; a++ { fmt.Printf("a: %v\n", a) break fla } } }
輸出結(jié)果如下
----break----
i: 1
a: 11
i: 2
a: 11
i: 3
a: 11
----break label----
i: 1
a: 11
五、 continue 語句
1. 語法
Go 語言的 continue 語句 有點(diǎn)像 break 語句。但是 continue 不是跳出循環(huán),而是跳過當(dāng)前循環(huán)執(zhí)行下一次循環(huán)語句。
for 循環(huán)中,執(zhí)行 continue 語句會(huì)觸發(fā) for 增量語句的執(zhí)行。
在多重循環(huán)中,可以用標(biāo)號(hào) label 標(biāo)出想 continue 的循環(huán)。
continue 語法格式如下:
continue;
continue 語句流程圖如下:
2. 示例
在變量 a 等于 15 的時(shí)候跳過本次循環(huán)執(zhí)行下一次循環(huán):
package main import "fmt" func main() { var a int = 10 for a < 20 { if a == 15 { a = a + 1 continue } fmt.Printf("a: %v\n", a) a++ } }
輸出結(jié)果如下
a: 10
a: 11
a: 12
a: 13
a: 14
a: 16
a: 17
a: 18
a: 19
用多重循環(huán)演示使用標(biāo)記和不使用標(biāo)記的區(qū)別:
package main import "fmt" func main() { // 不使用標(biāo)記 fmt.Println("---- continue ---- ") for i := 1; i <= 3; i++ { fmt.Printf("i: %d\n", i) for a := 11; a <= 13; a++ { fmt.Printf("a: %d\n", a) continue } } // 使用標(biāo)記 fmt.Println("---- continue label ----") re: for i := 1; i <= 3; i++ { fmt.Printf("i: %d\n", i) for a := 11; a <= 13; a++ { fmt.Printf("a: %d\n", a) continue re } } }
輸出結(jié)果如下
---- continue ----
i: 1
a: 11
a: 12
a: 13
i: 2
a: 11
a: 12
a: 13
i: 3
a: 11
a: 12
a: 13
---- continue label ----
i: 1
a: 11
i: 2
a: 11
i: 3
a: 11
六、goto 語句
1. 語法
Go 語言的 goto 語句可以無條件地轉(zhuǎn)移到過程中指定的行
goto 語句通常與條件語句配合使用,可用來實(shí)現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。
但是,在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用 goto 語句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。
goto 語法格式如下:
goto label;
..
.
label: statement;
goto 語句流程圖如下:
2. 示例
在變量 a 等于 15 的時(shí)候跳過本次循環(huán)并回到循環(huán)的開始語句 LOOP 處:
package main import "fmt" func main() { /* 定義局部變量 */ var a int = 10 /* 循環(huán) */ LOOP: for a < 20 { if a == 15 { /* 跳過迭代 */ a = a + 1 goto LOOP } fmt.Printf("a的值為 : %d\n", a) a++ } }
輸出結(jié)果如下
a的值為 : 10
a的值為 : 11
a的值為 : 12
a的值為 : 13
a的值為 : 14
a的值為 : 16
a的值為 : 17
a的值為 : 18
a的值為 : 19
goto 語句打印九九乘法表:
package main import "fmt" //for循環(huán)配合goto打印九九乘法表 func main() { for m := 1; m < 10; m++ { n := 1 LOOP: if n <= m { fmt.Printf("%dx%d=%d ", n, m, m*n) n++ goto LOOP } else { fmt.Println("") } n++ } }
到此這篇關(guān)于Go語言中循環(huán)語句使用的示例詳解的文章就介紹到這了,更多相關(guān)Go語言循環(huán)語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang實(shí)現(xiàn)自己的Redis(pipeline客戶端)實(shí)例探索
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis(pipeline客戶端)實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01從Context到go設(shè)計(jì)理念輕松上手教程
這篇文章主要為大家介紹了從Context到go設(shè)計(jì)理念輕松上手教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09go實(shí)現(xiàn)整型的二進(jìn)制轉(zhuǎn)化的方法
這篇文章主要介紹了go實(shí)現(xiàn)整型的二進(jìn)制轉(zhuǎn)化的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07

Go?實(shí)戰(zhàn)單隊(duì)列到優(yōu)先級(jí)隊(duì)列實(shí)現(xiàn)圖文示例