当前位置: 首页 > news >正文

go语言学习 第4章:流程控制

第4章:流程控制

在编程中,流程控制语句是控制程序执行顺序的关键工具。它们允许我们根据不同的条件执行不同的代码块,从而实现复杂的逻辑。Go语言提供了多种流程控制语句,包括条件语句(ifswitch)和循环语句(forrange)。本章将详细介绍这些流程控制语句的使用方法和注意事项。

一、条件语句

(一)if语句

if语句是最基本的条件语句,用于根据条件表达式的值决定是否执行某个代码块。在Go语言中,if语句的语法如下:

if 条件表达式 {// 逻辑代码
}
1. 单分支if

单分支if语句只有在条件表达式为true时才会执行代码块。例如:

package mainimport "fmt"func main() {var count int = 20if count < 30 {fmt.Println("库存不足")}
}

在这个例子中,如果count小于30,程序会输出“库存不足”。

2. 双分支if

双分支if语句在条件表达式为true时执行一个代码块,否则执行另一个代码块。语法如下:

if 条件表达式 {// 逻辑代码1
} else {// 逻辑代码2
}

例如:

package mainimport "fmt"func main() {var count int = 70if count < 30 {fmt.Println("库存不足")} else {fmt.Println("库存充足")}
}

在这个例子中,如果count小于30,程序会输出“库存不足”,否则输出“库存充足”。

3. 多分支if

多分支if语句通过多个else if子句来处理多个条件。语法如下:

if 条件表达式1 {// 逻辑代码1
} else if 条件表达式2 {// 逻辑代码2
} else {// 逻辑代码n
}

例如:

package mainimport "fmt"func main() {var score int = 85if score >= 90 {fmt.Println("您的成绩为A级别")} else if score >= 80 {fmt.Println("您的成绩为B级别")} else if score >= 70 {fmt.Println("您的成绩为C级别")} else if score >= 60 {fmt.Println("您的成绩为D级别")} else {fmt.Println("您的成绩为E级别")}
}

在这个例子中,程序会根据score的值输出相应的成绩级别。

(二)switch语句

switch语句用于根据不同的值选择执行不同的代码块。它比多个if语句更简洁,也更容易阅读。switch语句的语法如下:

switch 表达式 {
case1:// 语句块1
case2:// 语句块2
...
default:// 默认语句块
}
1. 基本用法

例如:

package mainimport "fmt"func main() {var score int = 85switch score / 10 {case 10:fmt.Println("您的等级为A级")case 9:fmt.Println("您的等级为A级")case 8:fmt.Println("您的等级为B级")case 7:fmt.Println("您的等级为C级")case 6:fmt.Println("您的等级为D级")default:fmt.Println("您的等级为E级")}
}

在这个例子中,程序会根据score的值输出相应的成绩级别。

2. 特殊用法
  • 省略表达式switch语句可以不带表达式,直接作为if语句的替代品。
package mainimport "fmt"func main() {var score int = 85switch {case score >= 90:fmt.Println("您的成绩为A级别")case score >= 80:fmt.Println("您的成绩为B级别")case score >= 70:fmt.Println("您的成绩为C级别")case score >= 60:fmt.Println("您的成绩为D级别")default:fmt.Println("您的成绩为E级别")}
}
  • fallthrough关键字fallthrough关键字可以用来实现switch语句的穿透,即执行完当前case后继续执行下一个case
package mainimport "fmt"func main() {var score int = 85switch score / 10 {case 10:fmt.Println("您的等级为A级")fallthroughcase 9:fmt.Println("您的等级为A级")fallthroughcase 8:fmt.Println("您的等级为B级")}
}

二、循环语句

(一)for循环

for循环是Go语言中最基本的循环语句,用于重复执行某个代码块。for循环的语法如下:

for 初始表达式; 布尔表达式; 迭代因子 {// 循环体
}
1. 基本用法

例如:

package mainimport "fmt"func main() {sum := 0for i := 1; i <= 5; i++ {sum += i}fmt.Println("1到5的和为:", sum)
}

在这个例子中,程序会计算1到5的和,并输出结果。

2. 无限循环

如果省略for循环的条件表达式,可以创建一个无限循环。例如:

package mainimport "fmt"func main() {for {fmt.Println("这是一个无限循环")break // 使用break语句退出循环}
}
3. 灵活的for循环

for循环的初始表达式和迭代因子可以省略,使其更加灵活。例如:

package mainimport "fmt"func main() {i := 1for i <= 5 {fmt.Println(i)i++}
}

(二)for-range循环

for-range循环是Go语言中用于遍历集合(如数组、切片、字符串、映射等)的专用循环语句。语法如下:

for key, value := range collection {// 循环体
}
1. 遍历数组和切片

例如:

package mainimport "fmt"func main() {arr := [5]int{1, 2, 3, 4, 5}for index, value := range arr {fmt.Printf("索引:%d, 值:%d\n", index, value)}
}
2. 遍历字符串

例如:

package mainimport "fmt"func main() {str := "hello, Golang!"for index, runeValue := range str {fmt.Printf("索引:%d, 字符:%c\n", index, runeValue)}
}
3. 遍历映射

例如:

package mainimport "fmt"func main() {m := map[string]int{"a": 1, "b": 2, "c": 3}for key, value := range m {fmt.Printf("键:%s, 值:%d\n", key, value)}
}

三、循环控制语句

(一)break语句

break语句用于终止循环的执行。例如:

package mainimport "fmt"func main() {for i := 1; i <= 10; i++ {if i == 5 {break}fmt.Println(i)}
}

在这个例子中,当i等于5时,循环会终止。

(二)continue语句

continue语句用于跳过当前循环的剩余部分,直接进入下一次迭代。例如:

package mainimport "fmt"func main() {for i := 1; i <= 10; i++ {if i%2 == 0 {continue}fmt.Println(i
http://www.lqws.cn/news/123085.html

相关文章:

  • FFmpeg avformat_open_input函数分析
  • 量化Quantization初步之--带量化(QAT)的XOR异或pyTorch版250501
  • Hadoop大数据集群深度实践:源码分析、参数调优与自动化运维平台选型全解
  • 从 CLIP 和 Qwen2.5-VL 入门多模态技术
  • Spine交换机和Leaf交换机
  • 解决idea编译运行项目时间长的问题
  • ideal2022.3.1版本编译项目报java: OutOfMemoryError: insufficient memory
  • spel 多层list嵌套表达式踩坑记
  • 智能进化论:AI必须跨越的四大认知鸿沟
  • 【Python实战】零基础实战教程(三) 变量与数据类型
  • 《IDEA 高效开发:自定义类/方法注释模板详解》
  • Apache POI操作Excel详解
  • 完成一个可交互的k8s管理平台的页面开发
  • C++——智能指针 unique_ptr
  • 微信小程序动态组件加载的应用场景与实现方式
  • 3D动画在微信小程序的实现方法
  • Quipus系统的视频知识库的构建原理及使用
  • 让音乐“看得见”:使用 HTML + JavaScript 实现酷炫的音频可视化播放器
  • 英国2025年战略防御评估报告:网络与电磁域成现代战争核心
  • 【从GEO数据库批量下载数据】
  • matlab基于GUI实现水果识别
  • mybatis 参数绑定错误示范(1)
  • 磐云P10 P057-综合渗透测试-使用反弹木马进行提权获取主机Shell
  • 【.net core】【watercloud】树形组件combotree导入及调用
  • .NET Core接口IServiceProvider
  • WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
  • 结构型设计模式之Proxy(代理)
  • 【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
  • 代码随想录算法训练营第60期第五十七天打卡
  • Kafka消息队列