一文帶你熟悉Go語言中的分支結(jié)構(gòu)
分支結(jié)構(gòu)
分支結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)中的基礎(chǔ)。針對(duì)分支結(jié)構(gòu),Go 提供了兩種語句形式,一種是 if
,另一種是 switch
。
if
if
語句是 Go 中最常用、最簡單的分支控制結(jié)構(gòu),它分為單分支、雙分支以及多分支三種用法。if
語句會(huì)根據(jù)布爾變量或布爾表達(dá)式,在兩個(gè)或多個(gè)分支中選擇一個(gè)執(zhí)行。以下為 if
語句的形式:
if bool_condition { // 新分支 } // 原分支
如果布爾變量或布爾表達(dá)式為 true
,則進(jìn)入新分支執(zhí)行,否則會(huì)繼續(xù)按照原分支的代碼去執(zhí)行。
單分支 if
單分支的用法,如果布爾表達(dá)式成立,則執(zhí)行新分支的代碼,然后繼續(xù)執(zhí)行原分支的代碼,否則執(zhí)行原分支的代碼,下面是代碼示例:
import "fmt" func main() { num := 3 if num > 2 { fmt.Println("num 大于 2") } fmt.Println("原分支代碼") }
打印結(jié)果
num 大于 2
原分支代碼
因?yàn)?num > 2
因此,程序運(yùn)行之后,會(huì)執(zhí)行新分支的打印語句以及原分支的打印語句。除了單個(gè)布爾表達(dá)式以外,還可以加入 &&
或 ||
條件運(yùn)算符進(jìn)行條件的組合,例如:
import "fmt" func main() { num := 3 if num > 2 && num < 10 { fmt.Println("num 大于 2 并且 num 小于 10") } fmt.Println("原分支代碼") }
雙分支 if-else
雙分支結(jié)構(gòu),if
配合 else
關(guān)鍵字實(shí)現(xiàn)。如果表達(dá)式為 true
,執(zhí)行 分支1
,否則執(zhí)行 分支2
,然后繼續(xù)執(zhí)行 原分支
。下面是代碼示例:
import "fmt" func main() { age := 18 if age == 18 { fmt.Println("您已滿18歲") } else { fmt.Println("您未滿18歲") } fmt.Println("原分支代碼") }
執(zhí)行結(jié)果:
您已滿18歲
原分支代碼
age
的值為 18
,因此會(huì)執(zhí)行第一個(gè)分支的里打印語句,然后繼續(xù)執(zhí)行原分支的打印語句。
多分支 if - else if - else
多分支需要在 if
和 else
的形式上,加上 else if
進(jìn)行實(shí)現(xiàn)。如果 if
后面的布爾表達(dá)式不成立,則會(huì)判斷 else if
后面的布爾表達(dá)式,然后進(jìn)行分支的選擇,下面是代碼示例:
import "fmt" func main() { name := "小明" if name == "小紅" { fmt.Println("您好,小紅!") } else if name == "小明" { fmt.Println("您好,小明!") } else { fmt.Println("您好,陌生人!") } fmt.Println("原分支代碼") }
執(zhí)行結(jié)果:
您好,小明!
原分支代碼
程序根據(jù)布爾表達(dá)式條件的值,選擇了第二個(gè)分支去執(zhí)行代碼。
在 if 語句中聲明變量
在 if
語句中,布爾表達(dá)式之前聲明變量是 Go
語言的慣用法,這種使用方式可以提高代碼的可讀性。由于是在 if
語句中聲明的變量,因此變量的作用域也只在 if 語句中,外部無法訪問這些變量。下面是示例:
import "fmt" func main() { mp := map[string]string{"name": "cmy"} if name, ok := mp["name"]; ok { fmt.Printf("存在 key → name:%s\n", name) } else { fmt.Println("key 不存在") } fmt.Println("原分支代碼") }
在 if
語句中定義 name,ok
變量,使用 ok
判斷 key
是否存在,如果存在則執(zhí)行分支里的代碼。
switch
基本用法:
switch T { case value1: // 分支 1 case value2, value3, ...: // 分支 2 ... default: // 默認(rèn)分支 }
T
可以是常量、變量和布爾表達(dá)式等,case
關(guān)鍵字后面的 value
類型,必須與 T
的類型是一致的,且 value
是唯一的。Go
會(huì)根據(jù) T
的值與各個(gè) case
后面的 value
進(jìn)行匹配,匹配成功則執(zhí)行對(duì)應(yīng) case
分支,case
后面可以有多個(gè) value
。default 為默認(rèn)分支,可有可無,如果前面的 case
都沒匹配上,則會(huì)執(zhí)行 default
分支。
示例
import "fmt" func main() { name := "小明" if name == "小紅" { fmt.Println("您好,小紅!") } else if name == "小明" { fmt.Println("您好,小明!") } else { fmt.Println("您好,陌生人!") } fmt.Println("原分支代碼") }
上面的代碼,可以使用 switch
分支改造:
import "fmt" func main() { name := "小明" switch name { case "小明": fmt.Println("您好,小明!") case "小紅": fmt.Println("您好,小紅!") default: fmt.Println("您好,陌生人!") } fmt.Println("原分支代碼") }
執(zhí)行結(jié)果:
您好,小明!
原分支代碼
name
等于 小明
,與第一個(gè) case
分支匹配成功,執(zhí)行這個(gè)分支的代碼,然后繼續(xù)執(zhí)行原分支的代碼。
switch 分支當(dāng) if 分支使用
當(dāng) switch
分支后面不帶常量、變量或布爾表達(dá)式等時(shí),其效果與 if
分支類似。
import "fmt" func main() { switch { case 1+1 != 2: fmt.Println("1 + 1 不等于 2") case 1+1 == 2: fmt.Println("1 + 1 等于 2") default: fmt.Println("0") } fmt.Println("原分支代碼") }
當(dāng) switch
后面什么都沒有時(shí),程序會(huì)根據(jù) case
后面布爾表達(dá)式的值進(jìn)行分支的選擇。
在 switch 語句中聲明變量
和 if
一樣,我們也可以在 switch
語句中聲明變量,變量的作用域也只在 swtich
語句中,外部無法訪問這些變量。
import "fmt" func main() { mp := map[string]string{"name": "cmy"} switch name := mp["name"]; name { case "cmy": fmt.Println("cmy") case "kk": fmt.Println("kk") default: fmt.Println("unknown") } fmt.Println("原分支代碼") }
fallthrough
Go
語言中,不同于其他語言,switch
塊內(nèi),每個(gè) case
無需聲明 break
來終止。如果我們想執(zhí)行多個(gè) case
分支,可以使用 fallthrough
關(guān)鍵字來實(shí)現(xiàn)。
import "fmt" func main() { mp := map[string]string{"name": "cmy"} switch name := mp["name"]; name { case "cmy": fmt.Println("cmy") fallthrough case "kk": fmt.Println("kk") default: fmt.Println("unknown") } fmt.Println("原分支代碼") }
執(zhí)行結(jié)果:
cmy
kk
原分支代碼
在第一個(gè) case
分支后面使用了 fallthrough
,不論下一個(gè) case
是否與 cmy
匹配,都會(huì)執(zhí)行這個(gè)分支的代碼。
小結(jié)
本文對(duì)兩種分支結(jié)構(gòu)(if
、switch
)進(jìn)行了介紹,也舉例說明了一些特殊的用法。如果代碼存在著復(fù)雜的 if
多分支結(jié)構(gòu),不妨用 swtich
進(jìn)行改造,也許代碼的可讀性會(huì)更高。
到此這篇關(guān)于一文帶你熟悉Go語言中的分支結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Go語言分支結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決電腦用GoLand太卡將VsCode定制成Go IDE步驟過程
這篇文章主要為大家介紹了解決電腦用GoLand太卡,將VsCode定制成Go IDE步驟過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Go中的fuzz模糊測(cè)試使用實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了Go中的fuzz模糊測(cè)試使用實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Go高效率開發(fā)Web參數(shù)校驗(yàn)三種方式實(shí)例
這篇文章主要介紹了Go高效率開發(fā)Web參數(shù)校驗(yàn)三種方式實(shí)例,需要的朋友可以參考下2022-11-11golang執(zhí)行命令操作 exec.Command
這篇文章主要介紹了golang執(zhí)行命令操作 exec.Command,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12淺談Golang 切片(slice)擴(kuò)容機(jī)制的原理
我們知道 Golang 切片在容量不足的情況下會(huì)進(jìn)行擴(kuò)容,擴(kuò)容的原理是怎樣的呢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Go用兩個(gè)協(xié)程交替打印100以內(nèi)的奇偶數(shù)的方法詳解
這篇文章主要給大家詳細(xì)介紹了Go用兩個(gè)協(xié)程交替打印100以內(nèi)的奇偶數(shù)的示例代碼,文中給大家介紹了兩個(gè)實(shí)現(xiàn)方法,使用無緩沖的channel和設(shè)置GOMAXPROCS=1,介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08