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

【Go】---流程控制语句

文章目录

  • Go 语言流程控制语句
    • 判断语句
      • 1. if 语句
        • 语法定义
        • 使用规则
        • 典型示例
        • 注意事项
      • 2. if-else 语句
        • 语法定义
        • 典型示例
      • 3. if-else if-else 语句
        • 语法定义
        • 典型示例
        • 注意事项
      • 4. switch 语句
        • 语法定义
        • 使用规则
        • 典型示例
        • 带表达式的 switch
        • 使用 fallthrough
    • 循环语句
      • 1. for 基本循环
        • 语法定义
        • 使用规则
        • 典型示例
        • 变体形式
      • 2. for-range 循环
        • 语法定义
        • 使用规则
        • 典型示例
    • 循环控制语句
      • 1. break 语句
      • 2. continue 语句
      • 3. goto 语句
    • 综合示例
      • 判断素数
      • 斐波那契数列

Go 语言流程控制语句

注意

  1. switch 自动 break:Go 语言的 switch 语句会自动 break,需要使用 fallthrough 才能继续执行
  2. range 遍历:遍历 map 时顺序不固定,遍历字符串时按 Unicode 码点进行

判断语句

1. if 语句

语法定义
if condition {// 条件为真时执行的代码
}
使用规则
  • 条件表达式必须是布尔类型
  • 条件表达式可以不加括号
  • 代码块必须使用大括号包围
典型示例
package mainimport "fmt"func main() {age := 18if age >= 18 {fmt.Println("您已成年")}
}
注意事项
  • Go 语言中 if 语句的条件表达式不能省略大括号
  • 条件表达式可以包含初始化语句

2. if-else 语句

语法定义
if condition {// 条件为真时执行的代码
} else {// 条件为假时执行的代码
}
典型示例
package mainimport "fmt"func main() {var is_login bool = trueif is_login {fmt.Println("用户已登录")} else {fmt.Println("用户未登录")}
}

3. if-else if-else 语句

语法定义
if condition1 {// 条件1为真时执行的代码
} else if condition2 {// 条件2为真时执行的代码
} else {// 所有条件都为假时执行的代码
}
典型示例
package mainimport "fmt"func main() {var score intfmt.Print("请输入成绩(0-100):")fmt.Scanln(&score)if 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")}
}
注意事项
  • else if 可以有多个
  • 条件判断按顺序执行,一旦某个条件满足,后续条件不再判断

4. switch 语句

语法定义
switch expression {
case value1:// expression == value1 时执行的代码
case value2:// expression == value2 时执行的代码
default:// 所有case都不匹配时执行的代码
}
使用规则
  • 每个 case 后面不需要 break,Go 语言会自动 break
  • 可以使用 fallthrough 关键字继续执行下一个 case
  • expression 可以省略,此时相当于 switch true
典型示例
package mainimport "fmt"func main() {day := 3switch day {case 1:fmt.Println("星期一")case 2:fmt.Println("星期二")case 3:fmt.Println("星期三")case 4:fmt.Println("星期四")case 5:fmt.Println("星期五")case 6:fmt.Println("星期六")case 7:fmt.Println("星期日")default:fmt.Println("无效的日期")}
}
带表达式的 switch
package mainimport "fmt"func main() {score := 85switch {case score >= 90:fmt.Println("优秀")case score >= 80:fmt.Println("良好")case score >= 70:fmt.Println("中等")case score >= 60:fmt.Println("及格")default:fmt.Println("不及格")}
}
使用 fallthrough
package mainimport "fmt"func main() {num := 2switch num {case 1:fmt.Println("数字是 1")fallthroughcase 2:fmt.Println("数字是 2")fallthroughcase 3:fmt.Println("数字是 3")default:fmt.Println("其他数字")}
}
// 输出:
// 数字是 2
// 数字是 3

循环语句

1. for 基本循环

语法定义
for initialization; condition; post {// 循环体
}
使用规则
  • initialization: 循环变量初始化
  • condition: 循环继续的条件
  • post: 每次循环后执行的操作
典型示例
package mainimport "fmt"func main() {// 基本 for 循环for i := 0; i < 5; i++ {fmt.Println(i)}// 输出: 0 1 2 3 4
}
变体形式

省略初始化语句

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

省略后置语句

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

无限循环

package mainimport "fmt"func main() {i := 0for {if i >= 5 {break}fmt.Println(i)i++}
}

2. for-range 循环

语法定义
for index, value := range collection {// 循环体
}
使用规则
  • 用于遍历数组、切片、字符串、map、通道等集合类型
  • 可以只接收索引或只接收值
  • 遍历 map 时顺序不固定
典型示例

遍历数组/切片

package mainimport "fmt"func main() {numbers := []int{1, 2, 3, 4, 5}// 同时获取索引和值for index, value := range numbers {fmt.Printf("索引: %d, 值: %d\n", index, value)}// 只获取值for _, value := range numbers {fmt.Printf("值: %d\n", value)}// 只获取索引for index := range numbers {fmt.Printf("索引: %d\n", index)}
}

遍历字符串

package mainimport "fmt"func main() {str := "Hello, 世界"for index, char := range str {fmt.Printf("索引: %d, 字符: %c, Unicode: %U\n", index, char, char)}
}

遍历 map

package mainimport "fmt"func main() {studentScores := map[string]int{"张三": 85,"李四": 92,"王五": 78,}for name, score := range studentScores {fmt.Printf("姓名: %s, 分数: %d\n", name, score)}
}

循环控制语句

1. break 语句

用于提前终止循环

package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}// 输出: 0 1 2 3 4
}

2. continue 语句

用于跳过当前循环的剩余代码,继续下一次循环

package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i%2 == 0 {continue}fmt.Println(i)}// 输出: 1 3 5 7 9
}

3. goto 语句

用于无条件跳转到指定的标签位置(不推荐使用)

package mainimport "fmt"func main() {i := 0start:if i < 5 {fmt.Println(i)i++goto start}
}

综合示例

判断素数

package mainimport "fmt"func isPrime(n int) bool {if n <= 1 {return false}for i := 2; i*i <= n; i++ {if n%i == 0 {return false}}return true
}func main() {for i := 1; i <= 20; i++ {if isPrime(i) {fmt.Printf("%d 是素数\n", i)} else {fmt.Printf("%d 不是素数\n", i)}}
}

斐波那契数列

package mainimport "fmt"func main() {n := 10a, b := 0, 1for i := 0; i < n; i++ {fmt.Print(a, " ")a, b = b, a+b}
}
http://www.dtcms.com/a/477541.html

相关文章:

  • Go小白学习路线
  • CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
  • [GO]什么是热重载,如何使用Air工具
  • 福州网站建设公司哪个好济南工程建设验收公示网
  • 百度爱采购服务商查询丽水网站建设seo
  • 小黑享受思考心流: 132. 分割回文串 II
  • java求职学习day38
  • Golang—channel
  • 推三返一链动模式图解
  • 【人工智能与机器人研究】一种库坝系统水下成像探查有缆机器人系统设计模式
  • Qt---setAttribute设置控件或窗口的内部属性
  • 储能的“胜负手”:容量、策略与经济性如何平衡?
  • 蓝桥杯出局,少儿编程的价值祛魅时刻?
  • TensorFlow2 Python深度学习 - 使用TensorBoard可视化数据
  • wordpress忘记了密码忘记网站优化文章
  • 怎么看网站用哪个系统做的泰安集团网站建设方案
  • 在 openEuler 上为 LLVM/ASan 增强 wchar_t 字符串函数支持的开源贡献实践
  • git的命令
  • php mysql 网站源码北京网络营销培训
  • 科普:在分布式系统日志分析中的概念:`span`、`child_spans` 和 `trace`
  • 视频融合平台EasyCVR在智慧水利中的实战应用:构建全域感知与智能预警平台
  • 基于区块链的分布式密钥管理系统:构建去中心化、高可信的密码基础设施
  • 【Linux】进程控制(三) 自定义 Shell 命令行解释器的实现与进程协作实践
  • (论文速读)TRIP: 基于图像噪声先验的时间残差学习图像到视频生成模型详解
  • 查询建筑企业网站qq云 wordpress
  • MoonBit Pearls Vol.11:正则表达式引擎的两种实现方法:导数与 Thompson 虚拟机
  • 激光测距用高精度时间测量(TDC)电路——MS1205N
  • C语言⽂件操作讲解(总)
  • 计算时间复杂度
  • 【ComfyUI】视频替换背景