Golang switch語(yǔ)句的具體使用
簡(jiǎn)介
switch 語(yǔ)句提供了一種簡(jiǎn)潔的方式來(lái)執(zhí)行多路分支選擇
基本使用
- 基本語(yǔ)法如下:
switch expression { case value1: // 當(dāng) expression 的值等于 value1 時(shí)執(zhí)行 case value2: // 當(dāng) expression 的值等于 value2
switch 的每個(gè)分支自動(dòng)提供了隱式的
break
,意味著只有第一個(gè)匹配的case
會(huì)被執(zhí)行。不需要顯式地在每個(gè)case
后面加break
如果你想要一個(gè)
case
執(zhí)行后繼續(xù)檢查下一個(gè)case
,可以使用fallthrough
語(yǔ)句:
switch x { case 1: fmt.Println("x is 1") fallthrough case 2: fmt.Println("x is 2") fallthrough case 3: fmt.Println("x is 3") default: fmt.Println("x is not 1, 2, or 3") }
在上面的代碼中,如果 x 是 1,它會(huì)打印出 “x is 1” 和 “x is 2”,因?yàn)?fallthrough 語(yǔ)句導(dǎo)致程序繼續(xù)執(zhí)行下一個(gè) case
- switch 也支持不帶表達(dá)式的用法,其中每個(gè) case 可以包含一個(gè)條件表達(dá)式:
y := 20 switch { case y > 10: fmt.Println("y is greater than 10") case y == 10: fmt.Println("y is exactly 10") default: fmt.Println("y is less than 10") }
在這種情況下,switch 語(yǔ)句類似于一系列的 if-else 語(yǔ)句,但其語(yǔ)法更加清晰
- switch 也可以包含初始化語(yǔ)句,類似于 if 語(yǔ)句:
switch z := computeValue(); { case z > 10: fmt.Println("z is greater than 10") case z == 10: fmt.Println("z is exactly 10") default: fmt.Println("z is less than 10") }
常見(jiàn)用法
- 類型判斷: switch 可以用來(lái)進(jìn)行類型判斷,在這種情況下,它會(huì)匹配一個(gè)接口變量的動(dòng)態(tài)類型
var i interface{} = /* 一個(gè)值 */ switch t := i.(type) { case string: fmt.Println("i is a string:", t) case int: fmt.Println("i is an int:", t) default: fmt.Printf("Unknown type %T\n", t) }
在這個(gè)例子中,i.(type)
用來(lái)發(fā)現(xiàn)接口變量 i 的動(dòng)態(tài)類型
注意:i.(type)
用于 switch 語(yǔ)句中進(jìn)行類型斷言的類型判斷。它只能在 switch 的類型判斷分支中使用,不可以單獨(dú)使用在其他地方
- 多值匹配: 你可以在一個(gè) case 語(yǔ)句中測(cè)試多個(gè)值。這可以簡(jiǎn)化代碼,避免編寫多個(gè)具有相同結(jié)果的 case 語(yǔ)句
switch x { case 1, 2, 3: fmt.Println("x is 1, 2 or 3") default: fmt.Println("x is not 1, 2, or 3") }
- 條件組合: case 語(yǔ)句中可以包含多個(gè)條件,這些條件可以是邏輯表達(dá)式
switch { case x > 0 && x < 10: fmt.Println("x is between 1 and 9") case x == 10 || x == 20: fmt.Println("x is either 10 or 20") }
- 無(wú)條件的 switch: 無(wú)條件的 switch 相當(dāng)于一個(gè)更優(yōu)雅的 if-else 鏈
switch { case score >= 90: fmt.Println("Grade: A") case score >= 80: fmt.Println("Grade: B") case score >= 70: fmt.Println("Grade: C") default: fmt.Println("Grade: F") }
- 退出循環(huán): 在循環(huán)內(nèi)部,
switch
可以與break
語(yǔ)句一起使用來(lái)退出循環(huán)
for { switch { case someCondition(): fmt.Println("Condition met") break // 默認(rèn)只會(huì)跳出 switch default: fmt.Println("Default case") } break // 退出 for 循環(huán) }
請(qǐng)注意,在這種情況下,break
語(yǔ)句只會(huì)退出 switch
,而不是循環(huán)。要退出循環(huán),需要在外部再次使用 break
語(yǔ)句
- 跳過(guò)當(dāng)前迭代: 在循環(huán)中使用
switch
,可以配合continue
語(yǔ)句來(lái)跳過(guò)當(dāng)前迭代
for x := 0; x < 5; x++ { switch { case x%2 == 0: // 跳過(guò)偶數(shù) continue } fmt.Println("Odd:", x) }
到此這篇關(guān)于Golang switch語(yǔ)句的具體使用的文章就介紹到這了,更多相關(guān)Golang switch語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang中http請(qǐng)求的context傳遞到異步任務(wù)的坑及解決
這篇文章主要介紹了golang中http請(qǐng)求的context傳遞到異步任務(wù)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔問(wèn)題
這篇文章主要介紹了Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔,在go語(yǔ)言中,沒(méi)有直接調(diào)用時(shí)鐘的函數(shù),可以通過(guò)?time.Now()?獲得帶單調(diào)時(shí)鐘的?Time?結(jié)構(gòu)體,并通過(guò)Since和Until獲得相對(duì)準(zhǔn)確的時(shí)間間隔,需要的朋友可以參考下2022-06-06Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)
這篇文章主要介紹了Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Golang?實(shí)現(xiàn)Redis?協(xié)議解析器的解決方案
這篇文章主要介紹了Golang???實(shí)現(xiàn)?Redis?協(xié)議解析器,本文將分別介紹Redis 通信協(xié)議 以及 協(xié)議解析器 的實(shí)現(xiàn),若您對(duì)協(xié)議有所了解可以直接閱讀協(xié)議解析器部分,需要的朋友可以參考下2022-10-10golang開(kāi)啟mod后import報(bào)紅的簡(jiǎn)單解決方案
這篇文章主要給大家介紹了關(guān)于golang開(kāi)啟mod后import報(bào)紅的簡(jiǎn)單解決方案,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法
本文主要介紹了golang生成RSA公鑰和密鑰的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08