✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑
文章目录
Go语言中的流程控制
在编程中,流程控制是决定程序如何执行的关键部分。Go语言作为一种静态类型、编译型语言,其流程控制机制与其他高级语言类似,但也有一些独特之处。本文将详细探讨Go语言中的流程控制语句,包括顺序控制、条件控制(if、if-else、if-else if-else)、循环控制(for循环、for-range循环)、分支控制(switch语句)、以及跳转控制(goto、break、continue)。本文通过实际案例,我们将深入理解这些控制语句的使用方法和应用场景。
1. 顺序控制
顺序控制是最基本的流程控制,程序按照从上到下的顺序逐行执行。在Go语言中,如果中间没有任何判断和跳转语句,程序就会按照这种默认的顺序执行。
示例代码:
package main
import"fmt"funcmain(){var num1 int=10var 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 main
import"fmt"funcmain(){
a :=10if a <20{
fmt.Println("a 小于 20")}
fmt.Println("a 的值为:", a)}// 输出:a 小于 20// a 的值为: 10
2.2 if-else 语句
if-else
语句用于在条件表达式为真时执行一段代码,否则执行另一段代码。
语法格式:
if 条件表达式 {// 条件为真时执行的代码}else{// 条件为假时执行的代码}
示例代码:
package main
import"fmt"funcmain(){
a :=100if 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为真时执行的代码}elseif 条件表达式2{// 条件表达式1为假且条件表达式2为真时执行的代码}else{// 所有条件都不满足时执行的代码}
示例代码:
package main
import"fmt"funcmain(){
x :=5if x >10{
fmt.Println("x 大于 10")}elseif x <5{
fmt.Println("x 小于 5")}else{
fmt.Println("x 等于 5")}}// 输出:x 等于 5
2.4 if条件语句实战
用户交互
package main
import"fmt"// 命令行程序 go build xxx.go 生成可执行程序。funcmain(){// 练习: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 main
import"fmt"funcmain(){for i :=0; i <5; i++{
fmt.Println(i)}}// 输出:0// 1// 2// 3// 4
计算1加到10的累加和
package main
import"fmt"// 计算1加到10的累加和funcmain(){
sum :=0//goland的快捷输入fori,可以生成循环结构模板for i :=1; i <=10; i++{
sum += i
}
fmt.Println(sum)}
模拟 while 循环:
package main
import"fmt"funcmain(){
x :=5for x >0{
fmt.Println(x)
x--}}// 输出:5// 4// 3// 2// 1
探究for循环
init:起始值 end:结束值 condition:条件变量
for 循环可以直接用
在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的
for + 结束for条件就可以跑起来
package main
import"fmt"// 探究for循环 init:起始值 end:结束值 condition:条件变量funcmain(){
i :=0// for 循环可以直接// 在for循环中定义的变量,作用域就只在 for循环内,外面是无法调用的// for + 结束for条件就可以跑起来for i <=5{
i++}
fmt.Println(i)}
无限循环:
package main
import("fmt""time")funcmain(){for{
fmt.Println("This will run indefinitely!")//每隔一秒执行一次
time.Sleep(1* time.Second)// 通常这里会加入某种条件来跳出循环// 例如通过break语句}}
3.2 for-range 循环
for-range
循环是Go语言中处理集合(如数组、切片、字符串、映射)的便捷方式。它会自动迭代集合中的每个元素,并返回元素的索引和值(对于映射,则返回键和值)。
语法格式:
for 索引, 值 :=range 集合 {// 循环体}
示例代码:
package main
import"fmt"funcmain(){
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 main
import"fmt"funcmain(){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 main
import"fmt"funcmain(){
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 main
import"fmt"funcmain(){
grade :="B"switch grade {case"A":
fmt.Println("优秀")case"B","C":
fmt.Println("良好")//在case中 一旦使用了 fallthrough,则会强制执行下一个case语句,不会去判断条件的fallthroughcase"D":
fmt.Println("及格")default:
fmt.Println("不及格")}}
可以看到,grade满足case “B”, “C”,走了这个分支后,又走了下面一个分支case “D”
fallthrough实现了case穿透
5. 跳转控制
跳转控制语句用于改变程序的正常执行流程,Go 语言提供了
goto
、
break
和
continue
语句来实现跳转控制。
goto语句
语法格式:
goto 标签名
...
标签名:// 代码块
示例代码(尽管不推荐,但展示其用法):
package main
import"fmt"funcmain(){
i :=0
HERE:
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 main
import"fmt"funcmain(){for i :=1; i <=10; i++{if i ==5{break}
fmt.Println(i)}}
i=5的时候退出循环
6.2 continue 语句
continue语句用于跳过当前循环的剩余部分,直接进入下一次迭代。同样,continue仅影响最近的一层循环。
语法格式:
continue [标签名]
如果continue后面跟有标签名,则会跳过该标签指定的循环的剩余部分,直接进行下一次迭代。
示例代码:
package main
import"fmt"funcmain(){for i :=1; i <=10; i++{if i ==5{continue// 到这里就结束了当次循环,不会向下了,继续从头开始}
fmt.Println(i)}}
跳过i=5的那次循环,继续进行后续的循环
版权归原作者 景天科技苑 所有, 如有侵权,请联系我们删除。