日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

一文帶你熟悉Go語言中的分支結構_Golang

作者:陳明勇 ? 更新時間: 2022-12-25 編程語言

分支結構

分支結構是結構化程序設計中的基礎。針對分支結構,Go 提供了兩種語句形式,一種是 if,另一種是 switch

if

if 語句是 Go 中最常用、最簡單的分支控制結構,它分為單分支、雙分支以及多分支三種用法。if 語句會根據布爾變量或布爾表達式,在兩個或多個分支中選擇一個執行。以下為 if 語句的形式:

if bool_condition {
	// 新分支
}
// 原分支

如果布爾變量或布爾表達式為 true ,則進入新分支執行,否則會繼續按照原分支的代碼去執行。

單分支 if

單分支的用法,如果布爾表達式成立,則執行新分支的代碼,然后繼續執行原分支的代碼,否則執行原分支的代碼,下面是代碼示例:

import "fmt"

func main() {
	num := 3
	if num > 2 {
		fmt.Println("num 大于 2")
	}
	fmt.Println("原分支代碼")
}

打印結果

num 大于 2
原分支代碼

因為 num > 2 因此,程序運行之后,會執行新分支的打印語句以及原分支的打印語句。除了單個布爾表達式以外,還可以加入 &&|| 條件運算符進行條件的組合,例如:

import "fmt"

func main() {
	num := 3
	if num > 2 && num < 10 {
		fmt.Println("num 大于 2 并且 num 小于 10")
	}
	fmt.Println("原分支代碼")
}

雙分支 if-else

雙分支結構,if 配合 else 關鍵字實現。如果表達式為 true,執行 分支1,否則執行 分支2,然后繼續執行 原分支。下面是代碼示例:

import "fmt"

func main() {
	age := 18
	if age == 18 {
		fmt.Println("您已滿18歲")
	} else {
		fmt.Println("您未滿18歲")
	}
	fmt.Println("原分支代碼")
}

執行結果:

您已滿18歲
原分支代碼

age 的值為 18,因此會執行第一個分支的里打印語句,然后繼續執行原分支的打印語句。

多分支 if - else if - else

多分支需要在 ifelse 的形式上,加上 else if 進行實現。如果 if 后面的布爾表達式不成立,則會判斷 else if 后面的布爾表達式,然后進行分支的選擇,下面是代碼示例:

import "fmt"

func main() {
	name := "小明"
	if name == "小紅" {
		fmt.Println("您好,小紅!")
	} else if name == "小明" {
		fmt.Println("您好,小明!")
	} else {
		fmt.Println("您好,陌生人!")
	}
	fmt.Println("原分支代碼")
}

執行結果:

您好,小明!
原分支代碼

程序根據布爾表達式條件的值,選擇了第二個分支去執行代碼。

在 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 是否存在,如果存在則執行分支里的代碼。

switch

基本用法:

switch T {
case value1:
	// 分支 1
case value2, value3, ...:
	// 分支 2
...
default:
	// 默認分支
}

T 可以是常量、變量和布爾表達式等,case 關鍵字后面的 value 類型,必須與 T 的類型是一致的,且 value 是唯一的。Go 會根據 T 的值與各個 case 后面的 value 進行匹配,匹配成功則執行對應 case 分支,case 后面可以有多個 value。default 為默認分支,可有可無,如果前面的 case 都沒匹配上,則會執行 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("原分支代碼")
}

執行結果:

您好,小明!
原分支代碼

name 等于 小明,與第一個 case 分支匹配成功,執行這個分支的代碼,然后繼續執行原分支的代碼。

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 后面什么都沒有時,程序會根據 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 塊內,每個 case 無需聲明 break 來終止。如果我們想執行多個 case 分支,可以使用 fallthrough 關鍵字來實現。

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("原分支代碼")
}

執行結果:

cmy
kk
原分支代碼

在第一個 case 分支后面使用了 fallthrough,不論下一個 case 是否與 cmy 匹配,都會執行這個分支的代碼。

小結

本文對兩種分支結構(ifswitch)進行了介紹,也舉例說明了一些特殊的用法。如果代碼存在著復雜的 if 多分支結構,不妨用 swtich 進行改造,也許代碼的可讀性會更高。

原文鏈接:https://juejin.cn/post/7170354551483007006

欄目分類
最近更新