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