Go語(yǔ)言提供了條件分支 if,狀態(tài)分支 switch,循環(huán) for,跳轉(zhuǎn) goto,延遲執(zhí)行 defer,這些流程控制語(yǔ)句。分別作說(shuō)明如下:

依據(jù)條件是否滿足確定執(zhí)行哪個(gè)分支。
語(yǔ)法:
if 條件 1 {
分支 1
} else if 條件 2 {
分支 2
} else if 條件 ... {
分支 ...
} else {
分支 else
}流程圖:
Go是強(qiáng)類(lèi)型,要求條件表達(dá)式嚴(yán)格返回布爾型數(shù)據(jù)!
狀態(tài)分支,依據(jù)特定的狀態(tài)值進(jìn)行分支判斷。
語(yǔ)法:
switch 分支測(cè)試表達(dá)式 {
case 狀態(tài)1:
分支1
case 狀態(tài)2:
分支2
case 狀態(tài)...:
分支...
default:
分支 default
}流程如下:
在其他語(yǔ)法(非Go,C,PHP)中,switch 有一個(gè)特定的現(xiàn)象,就是向下穿越,指的是一旦一個(gè)分支 case 滿足,則后續(xù)分支代碼都會(huì)被執(zhí)行。而Go語(yǔ)言中,默認(rèn)分支執(zhí)行完畢,switch 執(zhí)行完畢。使用 fallthrough 語(yǔ)法,可以達(dá)到穿越下一個(gè) case 分支的目的。
fallthrough 需要出現(xiàn)在分支語(yǔ)句塊的最后一句!
語(yǔ)法:
switch 分支測(cè)試表達(dá)式 {
case 狀態(tài)1:
分支1
fallthrough
case 狀態(tài)2:
分支2
fallthrough
default:
分支 default
}流程如下:
示例代碼,邏輯與 if-else-if 一致:
score := 89
switch {
case score >= 90:
fmt.Println("優(yōu)秀,不錯(cuò)")
case score >= 80:
fmt.Println("還行吧")
default:
fmt.Println("呵呵")
}個(gè)人感覺(jué)失去了 switch 分支的意義哈!
語(yǔ)法格式:
for 初始化語(yǔ)句; 條件語(yǔ)句; 條件變化語(yǔ)句 {
循環(huán)體
}
// 輸出1-10
for i := 1; i <= 10; i++ {
fmt.Println(i)
}流程如下:
Go中允許省略三個(gè)語(yǔ)句中的任意,就是可以形成如下的語(yǔ)法:
僅存在條件語(yǔ)句,類(lèi)似其他語(yǔ)言的 while 結(jié)構(gòu)!
for 條件語(yǔ)句 {
循環(huán)體
}無(wú)限循環(huán)結(jié)構(gòu),死循環(huán)
for {
循環(huán)體
}其他結(jié)構(gòu),三個(gè)語(yǔ)句可以任意省略,不再列舉:
for ; 條件語(yǔ)句; 條件變化語(yǔ)句 {
循環(huán)體
}
for 初始化語(yǔ)句; 條件語(yǔ)句; {
循環(huán)體
}終止整個(gè)循環(huán)執(zhí)行。
流程圖如下:
終止本次循環(huán)體的繼續(xù)執(zhí)行,進(jìn)行循環(huán)條件變化。
流程如下:
語(yǔ)法:
for {
for {
}
}在使用 break,continue 時(shí),若需要終止外層循環(huán) for,需要配合語(yǔ)句標(biāo)簽使用,演示如下:
userLabel:
for {
for {
break userLabel
或者
continue userLabel
}
}額外注意,switch 在語(yǔ)言中,被視為執(zhí)行一次的循環(huán)結(jié)構(gòu),因此 switch 中若要終止外層循環(huán),需要使用標(biāo)簽語(yǔ)法,不能直接 break、continue,演示如下:
userLabel:
for {
swtich variable {
case "exit"
break userLabel
或者
continue userLabel
}
}配合標(biāo)簽完成無(wú)條件跳轉(zhuǎn)。演示如下:
if error {
goto doError
}
// 其他業(yè)務(wù)邏輯代碼略
doError:
fmt.Println(errorInfo)
defer 語(yǔ)句會(huì)將其后語(yǔ)句進(jìn)行延遲處理。在 defer 所屬函數(shù)即將返回時(shí),將延遲處理的語(yǔ)句按 defer 的逆序進(jìn)行執(zhí)行,也就是說(shuō),先被 defer 的語(yǔ)句最后被執(zhí)行,最后被 defer 的語(yǔ)句,最先被執(zhí)行。演示如下:
func main() {
fmt.Println("before defer")
defer fmt.Println("defer A")
defer fmt.Println("defer B")
defer fmt.Println("defer C")
fmt.Println("after defer")
}
以上代碼的執(zhí)行結(jié)果:
before defer
after defer
defer C
defer B
defer Adefer 執(zhí)行是放在一個(gè)臨時(shí)的調(diào)用棧中,因此是先入棧后出棧的。
流程圖如下:
實(shí)操時(shí),處理互斥所時(shí),很常用!
完!
原文出自:小韓說(shuō)課
微信關(guān)注:小韓說(shuō)課
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)標(biāo)題:Go語(yǔ)言中的流程控制-創(chuàng)新互聯(lián)
文章來(lái)源:http://chinadenli.net/article16/diisdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、虛擬主機(jī)、做網(wǎng)站、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容