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-03
Go中使用單調(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-06
Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解)
這篇文章主要介紹了Go基于GORM 獲取當(dāng)前請(qǐng)求所執(zhí)行的 SQL 信息(思路詳解),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Golang?實(shí)現(xiàn)Redis?協(xié)議解析器的解決方案
這篇文章主要介紹了Golang???實(shí)現(xiàn)?Redis?協(xié)議解析器,本文將分別介紹Redis 通信協(xié)議 以及 協(xié)議解析器 的實(shí)現(xiàn),若您對(duì)協(xié)議有所了解可以直接閱讀協(xié)議解析器部分,需要的朋友可以參考下2022-10-10
golang開(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-01
golang生成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

