一文帶你熟悉Go語言中的分支結(jié)構(gòu)
分支結(jié)構(gòu)
分支結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中的基礎(chǔ)。針對分支結(jié)構(gòu),Go 提供了兩種語句形式,一種是 if,另一種是 switch。
if
if 語句是 Go 中最常用、最簡單的分支控制結(jié)構(gòu),它分為單分支、雙分支以及多分支三種用法。if 語句會根據(jù)布爾變量或布爾表達式,在兩個或多個分支中選擇一個執(zhí)行。以下為 if 語句的形式:
if bool_condition {
// 新分支
}
// 原分支如果布爾變量或布爾表達式為 true ,則進入新分支執(zhí)行,否則會繼續(xù)按照原分支的代碼去執(zhí)行。
單分支 if

單分支的用法,如果布爾表達式成立,則執(zhí)行新分支的代碼,然后繼續(xù)執(zhí)行原分支的代碼,否則執(zhí)行原分支的代碼,下面是代碼示例:
import "fmt"
func main() {
num := 3
if num > 2 {
fmt.Println("num 大于 2")
}
fmt.Println("原分支代碼")
}打印結(jié)果
num 大于 2
原分支代碼
因為 num > 2 因此,程序運行之后,會執(zhí)行新分支的打印語句以及原分支的打印語句。除了單個布爾表達式以外,還可以加入 && 或 || 條件運算符進行條件的組合,例如:
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)鍵字實現(xiàn)。如果表達式為 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,因此會執(zhí)行第一個分支的里打印語句,然后繼續(xù)執(zhí)行原分支的打印語句。
多分支 if - else if - else

多分支需要在 if 和 else 的形式上,加上 else if 進行實現(xiàn)。如果 if 后面的布爾表達式不成立,則會判斷 else if 后面的布爾表達式,然后進行分支的選擇,下面是代碼示例:
import "fmt"
func main() {
name := "小明"
if name == "小紅" {
fmt.Println("您好,小紅!")
} else if name == "小明" {
fmt.Println("您好,小明!")
} else {
fmt.Println("您好,陌生人!")
}
fmt.Println("原分支代碼")
}執(zhí)行結(jié)果:
您好,小明!
原分支代碼
程序根據(jù)布爾表達式條件的值,選擇了第二個分支去執(zhí)行代碼。
在 if 語句中聲明變量
在 if 語句中,布爾表達式之前聲明變量是 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:
// 默認分支
}T 可以是常量、變量和布爾表達式等,case 關(guān)鍵字后面的 value 類型,必須與 T 的類型是一致的,且 value 是唯一的。Go 會根據(jù) T 的值與各個 case 后面的 value 進行匹配,匹配成功則執(zhí)行對應 case 分支,case 后面可以有多個 value。default 為默認分支,可有可無,如果前面的 case 都沒匹配上,則會執(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 等于 小明,與第一個 case 分支匹配成功,執(zhí)行這個分支的代碼,然后繼續(xù)執(zhí)行原分支的代碼。
switch 分支當 if 分支使用
當 switch 分支后面不帶常量、變量或布爾表達式等時,其效果與 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("原分支代碼")
}當 switch 后面什么都沒有時,程序會根據(jù) case 后面布爾表達式的值進行分支的選擇。
在 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),每個 case 無需聲明 break 來終止。如果我們想執(zhí)行多個 case 分支,可以使用 fallthrough 關(guān)鍵字來實現(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
原分支代碼
在第一個 case 分支后面使用了 fallthrough,不論下一個 case 是否與 cmy 匹配,都會執(zhí)行這個分支的代碼。
小結(jié)
本文對兩種分支結(jié)構(gòu)(if、switch)進行了介紹,也舉例說明了一些特殊的用法。如果代碼存在著復雜的 if 多分支結(jié)構(gòu),不妨用 swtich 進行改造,也許代碼的可讀性會更高。
到此這篇關(guān)于一文帶你熟悉Go語言中的分支結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Go語言分支結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go中time.RFC3339 時間格式化的實現(xiàn)
這篇文章主要介紹了Go中time.RFC3339 時間格式化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
詳解Golang函數(shù)式選項(Functional?Options)模式
什么是函數(shù)式選項模式,為什么要這么寫,這個編程模式解決了什么問題呢?其實就是為了解決動態(tài)靈活的配置不同的參數(shù)的問題。下面通過本文給大家介紹Golang函數(shù)式選項(Functional?Options)模式的問題,感興趣的朋友一起看看吧2021-12-12
go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法
這篇文章主要介紹了go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法,實例分析了Go語言反射的使用技巧,需要的朋友可以參考下2015-03-03

