Golang基础 流程控制 条件判断
创始人
2024-02-21 16:06:04
0

条件判断

    • 01 条件判断 if
    • 02 分支选择 switch
    • 03 异步处理 select
    • 参考资料


条件语句一般指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。

01 条件判断 if

Golang 中 if 条件语句通过 if 关键字声明,声明条件可以省略条件表达式的括号,但是条件语句的代码块左大括号 { 必须在条件表达式的末尾,否则会触发编译错误。

// 声明语法
if 条件表达式 {/* 在条件表达式为 true 时执行 */
}// example:
func IfExp() {var x int = 10// if x > 10  // 编译出错// {//     fmt.Println("con't print here")// }if x >= 10 {fmt.Println("x 大于等于 10")}
}

多条件判断else 关键字和 if 对应在条件表达式为 false 时执行其代码块; else ifif 的延伸,与多个 if 判断不同的是 else if 与其关联的 if 互斥执行,而前者是相互独立执行的。

func IfExp() {var x int = 10if x != 10 {fmt.Println("x 不等于 10")} else {fmt.Println("x 等于 10")}y := 20if x == 10 {fmt.Println("x 等于 10")} else if y == 20 {fmt.Println("y 等于 20")} else {fmt.Println("x 不等于 10")}if x == 10 {fmt.Println("x 等于 10")}if y == 20 {fmt.Println("y 等于 20")}
}

局部变量作用域:Golang 中可以在 if 条件表达式之前添加执行语句,再根据执行语句的变量值进行判断。这种特殊写法引出了变量作用域的问题,上述执行语句中的变量仅在 if 局部代码块内生效,不影响外部的变量。

在编程中,变量在其实现了变量的功能后,作用范围越小,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行,但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助。

func IfExp() {var x int = 10if x := subFunc(); x == 1 {fmt.Println("x 等于 1")x -= 1fmt.Println("inner x:", x)} else {fmt.Println("x 等于 10")}fmt.Println("global x:", x)
}func subFunc() int {return 1
}/* output:
x 等于 1
inner x: 0
global x: 10
*/

02 分支选择 switch

switch 分支选择可以理解为一种批量的 if 语句,根据不同的条件执行不同的代码块,使用switch语句可方便地对大量的值进行判断。

区别于 C/C++ 中 switch 语句只能进行常量判断,Golang 中 switch 的分支表达式可以是任意类型,且在每个唯一的 case 分支代码块相互独立,可以省略 break 跳出操作,默认自动终止。

func SwitchExp() {var num int = 1switch num {case 0:fmt.Println("case 0")case 1:fmt.Println("case 1")case 2:fmt.Println("case 2")}
}

同分支合并:如果多个不同 case 的代码执行任务一致,可以将它们放在一起,不同的case表达式使用逗号分隔。

func SwitchExp() {str := "hello"switch str {case "hello", "world":fmt.Println("Hello,World!")case "你好", "世界":fmt.Println("你好,世界!")}
}

分支表达式:switch 的 case 中不仅可以是值类型的常量判断,还可以是表达式等任意类型。这种方式类似于 else if 机制,一旦一个 case 表达式满足,后续 case 不再被判断而跳出整个 switch;但是可以使用 fallthrough 关键字强制执行后面的 case 代码块

func SwitchExp() {n := 10switch {case n > 9 && n < 20:fmt.Println("9 < n < 20")fallthroughcase n == 10:fmt.Println("n == 10")}
}

用于类型判断:switch 分支选择常被用来判断 Golang 中表示任意类型或空接口的 any/interface{} 变量中实际存储的变量类型。

func SwitchExp() {var a interface{}dataType(a)var i int = 1dataType(i)var s string = "hello"dataType(s)
}func dataType(a any) {switch t := a.(type) {case nil:fmt.Printf("变量的类型 :%T\r\n", t)case int:fmt.Println("变量是 int 型")case float64:fmt.Println("变量是 float64 型")case func(int) float64:fmt.Println("变量是 func(int) 型")case bool, string:fmt.Println("变量是 bool 或 string 型")default:fmt.Println("未知型")}
}/* output:
变量的类型 :
变量是 int 型
变量是 bool 或 string 型
*/

03 异步处理 select

待并发编程更新…

参考资料

条件语句if · Go语言中文文档

条件语句switch · Go语言中文文档

Go语言 if判断和for循环实战 goto使用的那些坑 - 掘金


如果文章对你有帮助,欢迎一键三连 👍 💬 ⭐️ 。如果还能够点击关注,那真的是对我最大的鼓励 🔥🔥🔥 。


相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...