新聞中心
與多數(shù)語(yǔ)言不同的是,Go語(yǔ)言中的循環(huán)語(yǔ)句只支持 for 關(guān)鍵字,而不支持 while 和 do-while 結(jié)構(gòu),關(guān)鍵字 for 的基本使用方法與C語(yǔ)言和 C++ 中非常接近:

sum := 0
for i := 0; i < 10; i++ {
sum += i
} 可以看到比較大的一個(gè)不同在于 for 后面的條件表達(dá)式不需要用圓括號(hào) () 括起來(lái),Go語(yǔ)言還進(jìn)一步考慮到無(wú)限循環(huán)的場(chǎng)景,讓開(kāi)發(fā)者不用寫(xiě)無(wú)聊的 for(;;){}和do{} while(1);,而直接簡(jiǎn)化為如下的寫(xiě)法:
sum := 0
for {
sum++
if sum > 100 {
break
}
} 使用循環(huán)語(yǔ)句時(shí),需要注意的有以下幾點(diǎn):
- 左花括號(hào)
{必須與 for 處于同一行。 - Go語(yǔ)言中的 for 循環(huán)與C語(yǔ)言一樣,都允許在循環(huán)條件中定義和初始化變量,唯一的區(qū)別是,Go語(yǔ)言不支持以逗號(hào)為間隔的多個(gè)賦值語(yǔ)句,必須使用平行賦值的方式來(lái)初始化多個(gè)變量。
- Go語(yǔ)言的 for 循環(huán)同樣支持 continue 和 break 來(lái)控制循環(huán),但是它提供了一個(gè)更高級(jí)的 break,可以選擇中斷哪一個(gè)循環(huán),如下例:
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
fmt.Println(i)
}
}
JLoop:
// ... 上述代碼中,break 語(yǔ)句終止的是 JLoop 標(biāo)簽處的外層循環(huán)。
for 中的初始語(yǔ)句——開(kāi)始循環(huán)時(shí)執(zhí)行的語(yǔ)句
初始語(yǔ)句是在第一次循環(huán)前執(zhí)行的語(yǔ)句,一般使用初始語(yǔ)句執(zhí)行變量初始化,如果變量在此處被聲明,其作用域?qū)⒈痪窒拊谶@個(gè) for 的范圍內(nèi)。
初始語(yǔ)句可以被忽略,但是初始語(yǔ)句之后的分號(hào)必須要寫(xiě),代碼如下:
step := 2
for ; step > 0; step-- {
fmt.Println(step)
}這段代碼將 step 放在 for 的前面進(jìn)行初始化,for 中沒(méi)有初始語(yǔ)句,此時(shí) step 的作用域就比在初始語(yǔ)句中聲明 step 要大。
for 中的條件表達(dá)式——控制是否循環(huán)的開(kāi)關(guān)
每次循環(huán)開(kāi)始前都會(huì)計(jì)算條件表達(dá)式,如果表達(dá)式為 true,則循環(huán)繼續(xù),否則結(jié)束循環(huán),條件表達(dá)式可以被忽略,忽略條件表達(dá)式后默認(rèn)形成無(wú)限循環(huán)。
1) 結(jié)束循環(huán)時(shí)帶可執(zhí)行語(yǔ)句的無(wú)限循環(huán)
下面代碼忽略條件表達(dá)式,但是保留結(jié)束語(yǔ)句,代碼如下:
var i int
for ; ; i++ {
if i > 10 {
break
}
}代碼說(shuō)明如下:
- 第 3 行,無(wú)須設(shè)置 i 的初始值,因此忽略 for 的初始語(yǔ)句,兩個(gè)分號(hào)之間是條件表達(dá)式,也被忽略,此時(shí)循環(huán)會(huì)一直持續(xù)下去,for 的結(jié)束語(yǔ)句為 i++,每次結(jié)束循環(huán)前都會(huì)調(diào)用。
- 第 5 行,判斷 i 大于 10 時(shí),通過(guò) break 語(yǔ)句跳出 for 循環(huán)到第 9 行。
2) 無(wú)限循環(huán)
上面的代碼還可以改寫(xiě)為更美觀的寫(xiě)法,代碼如下:
var i int
for {
if i > 10 {
break
}
i++
}代碼說(shuō)明如下:
- 第 3 行,忽略 for 的所有語(yǔ)句,此時(shí) for 執(zhí)行無(wú)限循環(huán)。
- 第 9 行,將 i++ 從 for 的結(jié)束語(yǔ)句放置到函數(shù)體的末尾是等效的,這樣編寫(xiě)的代碼更具有可讀性。
無(wú)限循環(huán)在收發(fā)處理中較為常見(jiàn),但需要無(wú)限循環(huán)有可控的退出方式來(lái)結(jié)束循環(huán)。
3) 只有一個(gè)循環(huán)條件的循環(huán)
在上面代碼的基礎(chǔ)上進(jìn)一步簡(jiǎn)化代碼,將 if 判斷整合到 for 中,變?yōu)橄旅娴拇a:
var i int
for i <= 10 {
i++
} 在代碼第 3 行中,將之前使用 if i>10{} 判斷的表達(dá)式進(jìn)行取反,變?yōu)榕袛?i 小于等于 10 時(shí)持續(xù)進(jìn)行循環(huán)。
上面這段代碼其實(shí)類似于其他編程語(yǔ)言中的 while,在 while 后添加一個(gè)條件表達(dá)式,滿足條件表達(dá)式時(shí)持續(xù)循環(huán),否則結(jié)束循環(huán)。
for 中的結(jié)束語(yǔ)句——每次循環(huán)結(jié)束時(shí)執(zhí)行的語(yǔ)句
在結(jié)束每次循環(huán)前執(zhí)行的語(yǔ)句,如果循環(huán)被 break、goto、return、panic 等語(yǔ)句強(qiáng)制退出,結(jié)束語(yǔ)句不會(huì)被執(zhí)行。
文章題目:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言for(循環(huán)結(jié)構(gòu))
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/cdhphie.html


咨詢
建站咨詢
