流程控制語句:1、if語句,由一個布爾表達(dá)式后緊跟一個或多個語句組成;2、“if…else”語句,else中的表達(dá)式在布爾表達(dá)式為false時執(zhí)行;3、switch語句,用于基于不同條件執(zhí)行不同動作;4、select語句;5、for循環(huán)語句,語法“for k,v := range oldmap{newmap[k]=v}”;6、循環(huán)控制語句break、continue、goto。
本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
下面我們了解一下關(guān)于golang流程控制語句的基本內(nèi)容。
1、條件分支語句
和c語言類似,相關(guān)的條件語句如下表所示:
語句 | 描述 |
---|---|
if 語句 | if 語句 由一個布爾表達(dá)式后緊跟一個或多個語句組成。 |
if…else 語句 | if 語句 后可以使用可選的 else 語句, else 語句中的表達(dá)式在布爾表達(dá)式為 false 時執(zhí)行。 |
switch 語句 | switch 語句用于基于不同條件執(zhí)行不同動作。 |
select 語句 | select 語句類似于 switch 語句,但是select會隨機(jī)執(zhí)行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行。 |
- if語句
語法如下:
if 布爾表達(dá)式 { /* 在布爾表達(dá)式為 true 時執(zhí)行 */ }
- if-else語句
if 布爾表達(dá)式 { /* 在布爾表達(dá)式為 true 時執(zhí)行 */ } else { /* 在布爾表達(dá)式為 false 時執(zhí)行 */ }
- switch語句
其中的變量v
可以是任何類型,val1
和val2
可以是同類型的任意值,類型不局限為常量或者整數(shù),或者最終結(jié)果為相同類型的表達(dá)式。
switch v { case val1: ... case val2: ... default: ... }
- select語句
select 是 Go 中的一個控制結(jié)構(gòu),類似于用于通信的 switch 語句。每個 case 必須是一個通信操作,要么是發(fā)送要么是接收。它將會隨機(jī)執(zhí)行一個可運行的 case。如果沒有 case 可運行,它將阻塞,直到有 case 可運行。一個默認(rèn)的子句應(yīng)該總是可運行的。
select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定義任意數(shù)量的 case */ default : /* 可選 */ statement(s); }
注意:
- 每個case必須都是一個通信
- 所有channel表達(dá)式都會被求值,所有被發(fā)送的表達(dá)式都會被求值
- 如果任意某一個通信都可以,它就執(zhí)行,其他就忽略
- 如果有多個case都可以運行,select就會隨機(jī)挑選一個來執(zhí)行。
- 如果沒有一個case可以被運行:如果有default子句,就執(zhí)行default子句,select將被阻塞,直到某個通信可以運行,從而避免饑餓問題。
2、循環(huán)語句
2.1 循環(huán)處理語句
與多數(shù)語言不同的是,Go語言中的循環(huán)語句只支持 for 關(guān)鍵字,而不支持 while 和 do-while 結(jié)構(gòu),關(guān)鍵字 for 的基本使用方法與C語言和 C++ 中非常接近。
go中時使用for實現(xiàn)循環(huán)的,共有三種形式:
語法 | |
---|---|
和c語言中的for相同 | for init; condition; post {} |
和c語言中的while相同 | for condition{} |
和c語言中的for(;;) 相同 |
for{} |
除此以外,for循環(huán)還可以直接使用range對slice、map、數(shù)組以及字符串等進(jìn)行迭代循環(huán),格式如下:
for key, value := range oldmap { newmap[key] = value }
2.2 循環(huán)控制語句
控制語句 | 詳解 |
---|---|
break | 中斷跳出循環(huán)或者switch語句 |
continue | 跳過當(dāng)前循環(huán)的剩余語句,然后繼續(xù)下一輪循環(huán) |
goto語句 | 將控制轉(zhuǎn)移到被標(biāo)記的語句 |
1、break
break主要用于循環(huán)語句跳出循環(huán),和c語言中的使用方式是相同的。且在多重循環(huán)的時候還可以使用label標(biāo)出想要break的循環(huán)。
實例代碼如下:
a := 0 for a<5 { fmt.Printf("%dn", a) a++ if a==2 { break; } } /* output 0 1 2 */
2、continue
Go 語言的 continue 語句 有點像 break 語句。但是 continue 不是跳出循環(huán),而是跳過當(dāng)前循環(huán)執(zhí)行下一次循環(huán)語句。在多重循環(huán)中,可以用標(biāo)號 label 標(biāo)出想 continue 的循環(huán)。
實例代碼如下:
// 不使用標(biāo)記 fmt.Println("---- continue ---- ") for i := 1; i <= 3; i++ { fmt.Printf("i: %dn", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %dn", i2) continue } } /* output i: 1 i2: 11 i2: 12 i2: 13 i: 2 i2: 11 i2: 12 i2: 13 i: 3 i2: 11 i2: 12 i2: 13 */ // 使用標(biāo)記 fmt.Println("---- continue label ----") re: for i := 1; i <= 3; i++ { fmt.Printf("i: %d", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %dn", i2) continue re } } /* output i: 1 i2: 11 i: 2 i2: 11 i: 3 i2: 11 */
3、goto
goto語句主要是無條件轉(zhuǎn)移到過程中指定的行。goto語句通常和條件語句配合使用,可用來實現(xiàn)條件轉(zhuǎn)移、構(gòu)成循環(huán)以及跳出循環(huán)體等功能。但是并不主張使用goto語句,以免造成程序流程混亂。
示例代碼如下:
var a int = 0 LOOP: for a<5 { if a == 2 { a = a+1 goto LOOP } fmt.Printf("%dn", a) a++ } /* output: 0 1 2 3 4 */
以上代碼中的LOOP就是一個標(biāo)簽,當(dāng)運行到goto語句的時候,此時執(zhí)行流就會跳轉(zhuǎn)到LOOP標(biāo)志的哪一行上。
【