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

Go初级三

✅ Go 初级教程(三):控制结构 —— if、for、switch

我们将带你学习 Go 语言中常用的 控制流程语句,让你的程序能根据条件做出判断、循环处理数据,写出更有逻辑、更智能的代码!


🔹 1. if 语句:条件判断

Go 中的 if 语句和 C/Java 类似,但 不需要括号,且条件必须是布尔表达式。

if x > 10 {fmt.Println("x 大于 10")
} else if x == 10 {fmt.Println("x 等于 10")
} else {fmt.Println("x 小于 10")
}

小技巧if 可以带初始化语句(常用在错误处理中):

if v := x * 2; v > 100 {fmt.Println("v 的值是:", v)
}
// 注意:v 只在 if 块内有效

🔹 2. for 循环:唯一的循环结构

Go 只有 for 循环,没有 whiledo-while,但可以用 for 实现所有循环逻辑。

(1) 普通 for 循环
for i := 0; i < 5; i++ {fmt.Println("第", i, "次循环")
}
(2) 类似 while 的写法
n := 0
for n < 5 {fmt.Println(n)n++
}
(3) 无限循环(常用于服务监听)
for {fmt.Println("一直运行...")// 记得加 break 或 time.Sleep,否则会卡死
}
(4) 遍历数组/slice/map:使用 range
nums := []int{1, 2, 3, 4, 5}
for index, value := range nums {fmt.Printf("索引: %d, 值: %d\n", index, value)
}// 如果不需要索引,用下划线 _
for _, value := range nums {fmt.Println(value)
}

🔹 3. switch 语句:多分支选择

Go 的 switch 更加灵活,不需要 break,也不会穿透(fallthrough 除外)。

基本用法:
day := "周一"switch day {
case "周一":fmt.Println("开始上班了!")
case "周五":fmt.Println("快到周末了!")
case "周六", "周日":fmt.Println("休息日,放松一下~")
default:fmt.Println("普通的一天")
}
高级用法:不带表达式的 switch(类似 if-else 链)
score := 85switch {
case score >= 90:fmt.Println("优秀")
case score >= 75:fmt.Println("良好")
case score >= 60:fmt.Println("及格")
default:fmt.Println("不及格")
}
特殊关键字:fallthrough

如果你想让 case 继续执行下一个分支,使用 fallthrough

switch "a" {
case "a":fmt.Println("匹配 a")fallthrough
case "b":fmt.Println("也会执行这里")
}
// 输出:
// 匹配 a
// 也会执行这里

🔹 4. 实战小例子:判断成绩等级 + 循环输入

package mainimport "fmt"func main() {var score intfor {fmt.Print("请输入成绩(输入 -1 退出):")fmt.Scanf("%d", &score)if score == -1 {fmt.Println("程序结束!")break}switch {case score < 0 || score > 100:fmt.Println("成绩无效!")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("等级:F")}}
}

✅ 本篇小结

控制结构用途
if条件判断
for循环(唯一循环结构)
switch多分支选择,更简洁安全

💡 提示:Go 的设计哲学是 简洁、明确、少出错,所以去掉了不必要的括号、强制大括号、自动不穿透 case。


📣 下期预告(Go初级四)

在下一篇文章中,我们将深入 函数(Function) 的世界!学习如何定义函数、多返回值、参数传递、匿名函数和闭包,让你的代码更模块化、更高效!


如果你喜欢这个系列,欢迎继续关注 🌟
有任何问题,也可以留言讨论,我们一起学 Go!🚀

http://www.dtcms.com/a/349377.html

相关文章:

  • 上海AI实验室突破扩散模型!GetMesh融合点云与三平面,重塑3D内容创作
  • 少儿舞蹈小程序需求规格说明书
  • AutoCAD Electrical缺少驱动程序“AceRedist“解决方法
  • 【STM32】G030单片机的独立看门狗
  • ELKB日志分析平台 部署
  • 完美世界招数据仓库工程师咯
  • ArcGIS JSAPI 高级教程 - 创建渐变色材质的自定义几何体
  • three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题
  • 大数据平台ETL任务导入分库分表数据
  • Jenkins+docker 微服务实现自动化部署安装和部署过程
  • TDengine IDMP 应用场景:电动汽车
  • AI测试工具midsence和browse_use的使用场景和差异
  • react+taro打包到不同小程序
  • Flutter旧版本升级-> Android 配置、iOS配置
  • 机器视觉的3C玻璃盖板丝印应用
  • KeepAlived+Haproxy实现负载均衡(SLB)
  • window显示驱动开发—混合系统 DDI 和 dList DLL 支持
  • Shell 循环编程:for 与 select 轻松入门
  • HTTP 与 HTTPS 深度解析:从原理到实际应用
  • Kubernetes (K8s)入门指南:Docker之后,为什么需要容器编排?
  • 安全合规:AC(上网行为安全)--下
  • LeetCode热题100--102. 二叉树的层序遍历--中等
  • 什么是JSON-RPC 2.0,在项目中应该怎么使用
  • 09-数据存储与服务开发
  • GPIO子系统自主实现(简单版)
  • C++ static 关键字面试深度解析
  • 匹配网络处理不平衡数据集的6种优化策略:有效提升分类准确率
  • 【每天一个知识点】大模型训推一体机
  • RK3128 Android 7.1 进入深度休眠流程分析
  • Apache Maven 3.1.1 (eclipse luna)