✨✨ 欢迎大家来到景天科技苑✨✨
?? 养成好习惯,先赞后看哦~??
? 作者简介:景天科技苑
?《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
?《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。
所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑
文章目录
Go语言中的流程控制1. 顺序控制2. 条件控制2.1 if 语句2.2 if-else 语句2.3 if-else if-else 语句2.4 if条件语句实战 3. 循环控制3.1 for 循环3.2 for-range 循环3.3 打印九九乘法表 4. 分支控制4.1 switch 语句4.2 case穿透 5. 跳转控制goto语句 6. 终止循环6.1 break 语句6.2 continue 语句
Go语言中的流程控制
在编程中,流程控制是决定程序如何执行的关键部分。Go语言作为一种静态类型、编译型语言,其流程控制机制与其他高级语言类似,但也有一些独特之处。本文将详细探讨Go语言中的流程控制语句,包括顺序控制、条件控制(if、if-else、if-else if-else)、循环控制(for循环、for-range循环)、分支控制(switch语句)、以及跳转控制(goto、break、continue)。本文通过实际案例,我们将深入理解这些控制语句的使用方法和应用场景。
1. 顺序控制
顺序控制是最基本的流程控制,程序按照从上到下的顺序逐行执行。在Go语言中,如果中间没有任何判断和跳转语句,程序就会按照这种默认的顺序执行。
示例代码:
package mainimport "fmt"func main() { var num1 int = 10 var num2 int = num1 + 20 fmt.Println(num2) // 输出:30}
在这个例子中,程序首先定义了变量num1
并赋值为10,然后定义num2
并赋值为num1 + 20
,最后打印出num2
的值。这个过程完全按照代码的顺序执行,没有任何跳转或条件判断。
2. 条件控制
条件控制语句用于根据条件表达式的真假来决定是否执行某段代码。Go语言提供了if
、if-else
、if-else if-else
等结构来实现条件控制。
2.1 if 语句
if
语句是最基本的条件控制语句,用于在条件表达式为真时执行一段代码。
语法格式:
if 条件表达式 { // 条件为真时执行的代码}
示例代码:
package mainimport "fmt"func main() { a := 10 if a < 20 { fmt.Println("a 小于 20") } fmt.Println("a 的值为:", a)}// 输出:a 小于 20// a 的值为: 10
2.2 if-else 语句
if-else
语句用于在条件表达式为真时执行一段代码,否则执行另一段代码。
语法格式:
if 条件表达式 { // 条件为真时执行的代码} else { // 条件为假时执行的代码}
示例代码:
package mainimport "fmt"func main() { a := 100 if a < 20 { fmt.Println("a 小于 20") } else { fmt.Println("a 不小于 20") } fmt.Println("a 的值为:", a)}// 输出:a 不小于 20// a 的值为: 100
2.3 if-else if-else 语句
if-else if-else
语句用于处理多个条件分支,当某个条件满足时,执行相应的代码块。
语法格式:
if 条件表达式1 { // 条件表达式1为真时执行的代码} else if 条件表达式2 { // 条件表达式1为假且条件表达式2为真时执行的代码} else { // 所有条件都不满足时执行的代码}
示例代码:
package mainimport "fmt"func main() { x := 5 if x > 10 { fmt.Println("x 大于 10") } else if x < 5 { fmt.Println("x 小于 5") } else { fmt.Println("x 等于 5") }}// 输出:x 等于 5
2.4 if条件语句实战
用户交互
package mainimport "fmt"// 命令行程序 go build xxx.go 生成可执行程序。func main() {// 练习:if的练习// 判断用户密码输入是否正确// 输入框 : 接收用户的输入 (新知识)// 第一次判断// 输入框 :请再次输入密码 接收用户的输入 (新知识)// 第二次判断// 如果两次都是对的,那么则登录成功//var num1 intvar num2 int// 提示用户输入fmt.Printf("请输入密码 : \n")//fmt.Scan() 输入。传入的是指针对象,即是内存地址// 接收用户的输入 (阻塞式等待... 直到用户输入之后才继续运行)最简单的人机交互// Scan() &num1地址,fmt.Scan(&num1) // 等待你的输入,卡住... 如果你输入完毕,回车。输入内容就会赋值给num// 123456 模拟数据,未来是在数据库中查询出来的。根据用户查的if num1 == 123456 {fmt.Println("请再次输入密码: ")fmt.Scan(&num2)if num2 == 123456 {fmt.Println("登录成功")} else {fmt.Println("登录失败")}} else {fmt.Println("登录失败")}}
3. 循环控制
循环控制语句用于重复执行一段代码,直到满足特定的条件为止。Go语言提供了for
循环来实现循环控制,并通过for-range
结构来遍历集合。
3.1 for 循环
Go语言中的for
循环是唯一的循环结构,但它足够灵活,可以模拟传统的while
和do-while
循环。
语法格式:
for 初始化语句; 条件表达式; 迭代语句 { // 循环体}
示例代码:
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { fmt.Println(i) }}// 输出:0// 1// 2// 3// 4
计算1加到10的累加和
package mainimport "fmt"// 计算1加到10的累加和func main() { sum := 0 //goland的快捷输入fori,可以生成循环结构模板 for i := 1; i <= 10; i++ { sum += i } fmt.Println(sum)}
模拟 while 循环:
package mainimport "fmt"func main() { x := 5 for x > 0 { fmt.Println(x) x-- }}// 输出:5// 4// 3// 2// 1
探究for循环
init:起始值 end:结束值 condition:条件变量
for 循环可以直接用
在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的
for + 结束for条件就可以跑起来
package mainimport "fmt"// 探究for循环 init:起始值 end:结束值 condition:条件变量func main() { i := 0 // for 循环可以直接 // 在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的 // for + 结束for条件就可以跑起来 for i <= 5 { i++ } fmt.Println(i)}
无限循环:
package mainimport ( "fmt" "time")func main() { for { fmt.Println("This will run indefinitely!") //每隔一秒执行一次 time.Sleep(1 * time.Second) // 通常这里会加入某种条件来跳出循环 // 例如通过break语句 }}
3.2 for-range 循环
for-range
循环是Go语言中处理集合(如数组、切片、字符串、映射)的便捷方式。它会自动迭代集合中的每个元素,并返回元素的索引和值(对于映射,则返回键和值)。
语法格式:
for 索引, 值 := range 集合 { // 循环体}
示例代码:
package mainimport "fmt"func main() { nums := []int{1, 2, 3, 4, 5} for idx, num := range nums { fmt.Printf("Index: %d, Value: %d\n", idx, num) }}// 输出:Index: 0, Value: 1// Index: 1, Value: 2// Index: 2, Value: 3// Index: 3, Value: 4// Index: 4, Value: 5
3.3 打印九九乘法表
代码示例:
package mainimport "fmt"func main() {for i := 1; i < 10; i++ {for j := 1; j <= i; j++ {fmt.Printf("%d * %d = %d\t", j, i, i*j)}fmt.Println()}}
4. 分支控制
分支控制语句用于根据不同的条件执行不同的代码块。Go语言提供了switch
语句来实现分支控制,并允许在switch
语句中进行类型匹配(type switch)。
4.1 switch 语句
switch
语句基于不同的条件执行不同的代码块,与if-else
系列语句相比,它在处理多个条件时更为清晰和简洁。
语法格式:
switch 表达式 {case 值1: // 表达式等于值1时执行的代码case 值2, 值3: // 表达式等于值2或值3时执行的代码default: // 表达式与所有case都不匹配时执行的代码}
示例代码:
package mainimport "fmt"func main() { grade := "B" switch grade { case "A": fmt.Println("优秀") case "B", "C": fmt.Println("良好") case "D": fmt.Println("及格") default: fmt.Println("不及格") }}// 输出:良好
如果所有条件都不满足,走default分支
4.2 case穿透
特殊的情况:需要多个条件结果的输出,case穿透 。fallthrough
在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的。
示例代码:
package mainimport "fmt"func main() { grade := "B" switch grade { case "A": fmt.Println("优秀") case "B", "C": fmt.Println("良好") //在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的 fallthrough case "D": fmt.Println("及格") default: fmt.Println("不及格") }}
可以看到,grade满足case “B”, “C”,走了这个分支后,又走了下面一个分支case “D”
fallthrough实现了case穿透
5. 跳转控制
跳转控制语句用于改变程序的正常执行流程,Go 语言提供了 goto
、break
和 continue
语句来实现跳转控制。
goto语句
语法格式:
goto 标签名
... 标签名: // 代码块
示例代码(尽管不推荐,但展示其用法):
package mainimport "fmt"func main() { i := 0HERE: fmt.Println(i) i++ if i < 5 { goto HERE }}// 输出:从0到4的连续数字
6. 终止循环
break : 结束整个循环,立即停止
continue :结束当前这次循环,继续进行下一次循环
6.1 break 语句
break语句用于提前终止for、switch或select语句的执行。在多层嵌套循环中,break仅终止最近的一层循环。
语法格式:
break [标签名]
如果break后面跟有标签名,则会终止该标签指定的循环或switch语句。
示例代码:
package mainimport "fmt"func main() { for i := 1; i <= 10; i++ { if i == 5 { break } fmt.Println(i) }}
i=5的时候退出循环
6.2 continue 语句
continue语句用于跳过当前循环的剩余部分,直接进入下一次迭代。同样,continue仅影响最近的一层循环。
语法格式:
continue [标签名]
如果continue后面跟有标签名,则会跳过该标签指定的循环的剩余部分,直接进行下一次迭代。
示例代码:
package mainimport "fmt"func main() { for i := 1; i <= 10; i++ { if i == 5 { continue // 到这里就结束了当次循环,不会向下了,继续从头开始 } fmt.Println(i) }}
跳过i=5的那次循环,继续进行后续的循环