最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

5.3 switch 結(jié)構(gòu)

2022-03-30 19:39 作者:半抹燈芯  | 我要投稿


5.3 switch 結(jié)構(gòu)

相比較 C 和 Java 等其它語(yǔ)言而言,Go 語(yǔ)言中的 switch 結(jié)構(gòu)使用上更加靈活。它接受任意形式的表達(dá)式:

  1. switch var1 {

  2. ? ?case val1:

  3. ? ? ? ?...

  4. ? ?case val2:

  5. ? ? ? ?...

  6. ? ?default:

  7. ? ? ? ?...

  8. }

變量 var1 可以是任何類型,而 val1 和 val2 則可以是同類型的任意值。類型不被局限于常量或整數(shù),但必須是相同的類型;或者最終結(jié)果為相同類型的表達(dá)式。前花括號(hào)?{?必須和 switch 關(guān)鍵字在同一行。

您可以同時(shí)測(cè)試多個(gè)可能符合條件的值,使用逗號(hào)分割它們,例如:case val1, val2, val3

每一個(gè)?case?分支都是唯一的,從上直下逐一測(cè)試,直到匹配為止。

一旦成功地匹配到每個(gè)分支,在執(zhí)行完相應(yīng)代碼后就會(huì)退出整個(gè) switch 代碼塊,也就是說(shuō)您不需要特別使用?break?語(yǔ)句來(lái)表示結(jié)束。

因此,程序也不會(huì)自動(dòng)地去執(zhí)行下一個(gè)分支的代碼。如果在執(zhí)行完每個(gè)分支的代碼后,還希望繼續(xù)執(zhí)行后續(xù)分支的代碼,可以使用?fallthrough?關(guān)鍵字來(lái)達(dá)到目的。

因此:

  1. switch i {

  2. ? ?case 0: // 空分支,只有當(dāng) i == 0 時(shí)才會(huì)進(jìn)入分支

  3. ? ?case 1:

  4. ? ? ? ?f() // 當(dāng) i == 0 時(shí)函數(shù)不會(huì)被調(diào)用

  5. }

并且:

  1. switch i {

  2. ? ?case 0: fallthrough

  3. ? ?case 1:

  4. ? ? ? ?f() // 當(dāng) i == 0 時(shí)函數(shù)也會(huì)被調(diào)用

  5. }

在?case …:?語(yǔ)句之后,您不需要使用花括號(hào)將多行語(yǔ)句括起來(lái),但您可以在分支中進(jìn)行任意形式的編碼。當(dāng)代碼塊只有一行時(shí),可以直接放置在?case?語(yǔ)句之后。

您同樣可以使用?return?語(yǔ)句來(lái)提前結(jié)束代碼塊的執(zhí)行。當(dāng)您在 switch 語(yǔ)句塊中使用?return?語(yǔ)句,并且您的函數(shù)是有返回值的,您還需要在 switch 之后添加相應(yīng)的?return?語(yǔ)句以確保函數(shù)始終會(huì)返回。

可選的?default?分支可以出現(xiàn)在任何順序,但最好將它放在最后。它的作用類似與?if-else?語(yǔ)句中的?else,表示不符合任何已給出條件時(shí),執(zhí)行相關(guān)語(yǔ)句。

示例 5.4?switch1.go:

  1. package main


  2. import "fmt"


  3. func main() {

  4. ? ?var num1 int = 100


  5. ? ?switch num1 {

  6. ? ?case 98, 99:

  7. ? ? ? ?fmt.Println("It's equal to 98")

  8. ? ?case 100:

  9. ? ? ? ?fmt.Println("It's equal to 100")

  10. ? ?default:

  11. ? ? ? ?fmt.Println("It's not equal to 98 or 100")

  12. ? ?}

  13. }

輸出:

  1. It's equal to 100

在第 12.1 節(jié),我們會(huì)使用 switch 語(yǔ)句判斷從鍵盤(pán)輸入的字符(詳見(jiàn)第 12.2 節(jié)的 switch.go)。switch 語(yǔ)句的第二種形式是不提供任何被判斷的值(實(shí)際上默認(rèn)為判斷是否為 true),然后在每個(gè) case 分支中進(jìn)行測(cè)試不同的條件。當(dāng)任一分支的測(cè)試結(jié)果為 true 時(shí),該分支的代碼會(huì)被執(zhí)行。這看起來(lái)非常像鏈?zhǔn)降?if-else?語(yǔ)句,但是在測(cè)試條件非常多的情況下,提供了可讀性更好的書(shū)寫(xiě)方式。

  1. switch {

  2. ? ?case condition1:

  3. ? ? ? ?...

  4. ? ?case condition2:

  5. ? ? ? ?...

  6. ? ?default:

  7. ? ? ? ?...

  8. }

例如:

  1. switch {

  2. ? ?case i < 0:

  3. ? ? ? ?f1()

  4. ? ?case i == 0:

  5. ? ? ? ?f2()

  6. ? ?case i > 0:

  7. ? ? ? ?f3()

  8. }

任何支持進(jìn)行相等判斷的類型都可以作為測(cè)試表達(dá)式的條件,包括 int、string、指針等。

示例 5.4?switch2.go:

  1. package main


  2. import "fmt"


  3. func main() {

  4. ? ?var num1 int = 7


  5. ? ?switch {

  6. ? ? ? ?case num1 < 0:

  7. ? ? ? ? ? ?fmt.Println("Number is negative")

  8. ? ? ? ?case num1 > 0 && num1 < 10:

  9. ? ? ? ? ? ?fmt.Println("Number is between 0 and 10")

  10. ? ? ? ?default:

  11. ? ? ? ? ? ?fmt.Println("Number is 10 or greater")

  12. ? ?}

  13. }

輸出:

  1. Number is between 0 and 10

switch 語(yǔ)句的第三種形式是包含一個(gè)初始化語(yǔ)句:

  1. switch initialization {

  2. ? ?case val1:

  3. ? ? ? ?...

  4. ? ?case val2:

  5. ? ? ? ?...

  6. ? ?default:

  7. ? ? ? ?...

  8. }

這種形式可以非常優(yōu)雅地進(jìn)行條件判斷:

  1. switch result := calculate(); {

  2. ? ?case result < 0:

  3. ? ? ? ?...

  4. ? ?case result > 0:

  5. ? ? ? ?...

  6. ? ?default:

  7. ? ? ? ?// 0

  8. }

在下面這個(gè)代碼片段中,變量 a 和 b 被平行初始化,然后作為判斷條件:

  1. switch a, b := x[i], y[j]; {

  2. ? ?case a < b: t = -1

  3. ? ?case a == b: t = 0

  4. ? ?case a > b: t = 1

  5. }

switch 語(yǔ)句還可以被用于 type-switch(詳見(jiàn)第 11.4 節(jié))來(lái)判斷某個(gè) interface 變量中實(shí)際存儲(chǔ)的變量類型。

問(wèn)題 5.1:

請(qǐng)說(shuō)出下面代碼片段輸出的結(jié)果:

?復(fù)制代碼

  1. k := 6

  2. switch k {

  3. ? ?case 4: fmt.Println("was <= 4"); fallthrough;

  4. ? ?case 5: fmt.Println("was <= 5"); fallthrough;

  5. ? ?case 6: fmt.Println("was <= 6"); fallthrough;

  6. ? ?case 7: fmt.Println("was <= 7"); fallthrough;

  7. ? ?case 8: fmt.Println("was <= 8"); fallthrough;

  8. ? ?default: fmt.Println("default case")

  9. }

練習(xí) 5.2:season.go:

寫(xiě)一個(gè) Season 函數(shù),要求接受一個(gè)代表月份的數(shù)字,然后返回所代表月份所在季節(jié)的名稱(不用考慮月份的日期)。

https://www.wanxiangyundang.top/read/the-way-to-go/5.3.html

5.3 switch 結(jié)構(gòu)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
邯郸市| 云安县| 海兴县| 新丰县| 东方市| 仁化县| 天津市| 清徐县| 襄汾县| 东乡族自治县| 夏津县| 和林格尔县| 驻马店市| 偏关县| 鄂温| 筠连县| 两当县| 泌阳县| 类乌齐县| 高尔夫| 吴桥县| 华亭县| 绍兴县| 西畴县| 元阳县| 沧源| 林州市| 平顶山市| 秦皇岛市| 玛曲县| 泗阳县| 镶黄旗| 乐陵市| 木兰县| 天津市| 比如县| 福安市| 安新县| 白朗县| 宁河县| 璧山县|