溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語言中的流程控制

發(fā)布時(shí)間:2020-08-06 03:12:15 來源:網(wǎng)絡(luò) 閱讀:221 作者:小韓說課 欄目:編程語言

1 概述

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

2 條件分支 if

依據(jù)條件是否滿足確定執(zhí)行哪個(gè)分支。
語法:

if 條件 1 {
  分支 1
} else if 條件 2 {
  分支 2
} else if 條件 ... {
  分支 ...
} else {
  分支 else
}

流程圖:
Go語言中的流程控制

Go是強(qiáng)類型,要求條件表達(dá)式嚴(yán)格返回布爾型數(shù)據(jù)!

3 狀態(tài)分支 switch

3.1 基礎(chǔ)

狀態(tài)分支,依據(jù)特定的狀態(tài)值進(jìn)行分支判斷。
語法:

switch 分支測(cè)試表達(dá)式 {
case 狀態(tài)1:
    分支1
case 狀態(tài)2:
    分支2
case 狀態(tài)...:
    分支...
default:
  分支 default
} 

流程如下:
Go語言中的流程控制

3.2 fallthrough,向下穿越

在其他語法(非Go,C,PHP)中,switch 有一個(gè)特定的現(xiàn)象,就是向下穿越,指的是一旦一個(gè)分支 case 滿足,則后續(xù)分支代碼都會(huì)被執(zhí)行。而Go語言中,默認(rèn)分支執(zhí)行完畢,switch 執(zhí)行完畢。使用 fallthrough 語法,可以達(dá)到穿越下一個(gè) case 分支的目的。
fallthrough 需要出現(xiàn)在分支語句塊的最后一句!
語法:

switch 分支測(cè)試表達(dá)式 {
case 狀態(tài)1:
    分支1
    fallthrough
case 狀態(tài)2:
    分支2
    fallthrough
default:
  分支 default
} 

流程如下:
Go語言中的流程控制

3.3 條件型 switch

示例代碼,邏輯與 if-else-if 一致:

score := 89
switch {
case score >= 90:
  fmt.Println("優(yōu)秀,不錯(cuò)")
case score >= 80:
  fmt.Println("還行吧")
default:
  fmt.Println("呵呵")
}

個(gè)人感覺失去了 switch 分支的意義哈!

4 循環(huán)for

4.1 基本

語法格式:

for 初始化語句; 條件語句; 條件變化語句 {
  循環(huán)體
}

// 輸出1-10
for i := 1; i <= 10; i++ {
 fmt.Println(i)
}

流程如下:
Go語言中的流程控制

4.2 省略語句

Go中允許省略三個(gè)語句中的任意,就是可以形成如下的語法:
僅存在條件語句,類似其他語言的 while 結(jié)構(gòu)!

for 條件語句 {
  循環(huán)體
}

無限循環(huán)結(jié)構(gòu),死循環(huán)

for {
  循環(huán)體
}

其他結(jié)構(gòu),三個(gè)語句可以任意省略,不再列舉:

for ; 條件語句; 條件變化語句 {
  循環(huán)體
}
for 初始化語句; 條件語句; {
  循環(huán)體
}

4.3 break

終止整個(gè)循環(huán)執(zhí)行。
流程圖如下:
Go語言中的流程控制

4.4 continue

終止本次循環(huán)體的繼續(xù)執(zhí)行,進(jìn)行循環(huán)條件變化。
流程如下:
Go語言中的流程控制

4.5 嵌套循環(huán)

語法:

for {
  for {

  }
}

在使用 break,continue 時(shí),若需要終止外層循環(huán) for,需要配合語句標(biāo)簽使用,演示如下:

userLabel:
for {
  for {
    break userLabel
    或者
    continue userLabel
  }
}

額外注意,switch 在語言中,被視為執(zhí)行一次的循環(huán)結(jié)構(gòu),因此 switch 中若要終止外層循環(huán),需要使用標(biāo)簽語法,不能直接 break、continue,演示如下:

userLabel:
for {
  swtich variable {
    case "exit"
      break userLabel
      或者
      continue userLabel
  }
}

5 goto

配合標(biāo)簽完成無條件跳轉(zhuǎn)。演示如下:

if error {
  goto doError
}

// 其他業(yè)務(wù)邏輯代碼略

doError:
fmt.Println(errorInfo)

6 延遲執(zhí)行defer

defer 語句會(huì)將其后語句進(jìn)行延遲處理。在 defer 所屬函數(shù)即將返回時(shí),將延遲處理的語句按 defer 的逆序進(jìn)行執(zhí)行,也就是說,先被 defer 的語句最后被執(zhí)行,最后被 defer 的語句,最先被執(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 A

defer 執(zhí)行是放在一個(gè)臨時(shí)的調(diào)用棧中,因此是先入棧后出棧的。
流程圖如下:
Go語言中的流程控制

實(shí)操時(shí),處理互斥所時(shí),很常用!

完!
原文出自:小韓說課
微信關(guān)注:小韓說課
Go語言中的流程控制

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI