Go 语言大白话入门 6 - 判断与循环

判断与循环

本章目标

这章把两件核心能力练起来:判断和重复执行。 你学完要能自己写出 if、for、switch,并且看到报错能自己改。

常见坑位

先把最常见的坑看一眼,后面不容易卡住。

  1. if 条件外面加了圆括号,写法不符合 Go 习惯。
  2. for 三段式里把条件写反,导致一次都不执行。
  3. break 和 continue 混用,结果和预期完全不一样。
  4. range 返回的索引和值搞反。
  5. 以为 switch 也要手动写 break。

正文步骤

1. if:让程序会做选择
复制代码

package main import "fmt" func main() { age := 20 // 年龄 if age >= 18 { fmt.Println("你已经成年") } else { fmt.Println("你还未成年") } }

结论很简单:条件成立走 if,不成立走 else。

再补一条常用写法:if 里可以先定义一个临时变量。

复制代码

package main import "fmt" func main() { if score := 75; score >= 60 { fmt.Println("及格") } else { fmt.Println("不及格") } }

score 只在这个 if-else 代码块内有效。

2. for:让程序按规则重复
复制代码

package main import "fmt" func main() { for i := 1; i <= 5; i++ { fmt.Println("第", i, "次输出") } }

for i := 1; i <= 5; i++ 可拆成三段:

  1. i := 1:初始化(只执行一次)。
  2. i <= 5:循环条件(每轮开始前检查)。
  3. i++:步进(每轮结束后执行)。

还有两种常见写法:

复制代码

package main import "fmt" func main() { // 类似 while:只有条件 count := 0 for count < 3 { fmt.Println("count:", count) count++ } // 死循环:通常配合 break for { fmt.Println("执行一次就退出") break } }

Go 没有 while,一个 for 覆盖全部循环场景。

3. for range:遍历一组数据
复制代码

package main import "fmt" func main() { names := []string{"小李", "小王", "小张"} for index, name := range names { fmt.Println(index, name) } }

range 每轮给你两个值:

  • index:索引(从 0 开始)
  • name:当前元素

如果不要索引,用 _ 丢掉:

复制代码

for _, name := range names { fmt.Println(name) }

4. break 和 continue:中途控制循环
复制代码

package main import "fmt" func main() { // break:满足条件后直接退出整个循环 users := []string{"小王", "小李", "小张", "小赵"} for _, user := range users { if user == "小张" { fmt.Println("找到了:", user) break } } // continue:跳过本轮,继续下一轮 numbers := []int{1, 2, 3, 4, 5, 6} for _, number := range numbers { if number%2 == 0 { continue // 偶数跳过 } fmt.Println("奇数:", number) } }

一句话记忆:

  • break 是"整轮结束"。
  • continue 是"本轮跳过"。
5. switch:分支多时更清楚
复制代码

package main import "fmt" func main() { score := 85 switch { case score >= 90: fmt.Println("优秀") case score >= 60: fmt.Println("及格") default: fmt.Println("不及格") } }

按具体值匹配也很常见:

复制代码

package main import "fmt" func main() { day := 2 switch day { case 1: fmt.Println("周一") case 2: fmt.Println("周二") default: fmt.Println("未知") } }

注意:Go 的 switch 默认每个 case 自动结束,不需要手动写 break。

6. 两个补充:取余和多重赋值

先看取余 %,判断奇偶时非常高频。

复制代码

package main import "fmt" func main() { fmt.Println(10 % 3) // 1 fmt.Println(4 % 2) // 0 }

再看多重赋值,一行交换两个变量。

复制代码

package main import "fmt" func main() { left, right := 1, 2 left, right = right, left fmt.Println(left, right) // 2 1 }

示例代码(最小可运行整合版)

下面这段把本章核心点串在一起,复制可直接运行。

复制代码

package main import "fmt" func main() { score := 78 // 1) 判断 if score >= 60 { fmt.Println("成绩及格") } else { fmt.Println("成绩不及格") } // 2) 三段式循环 for i := 1; i <= 3; i++ { fmt.Println("第", i, "轮") } // 3) range + continue numbers := []int{1, 2, 3, 4, 5, 6} oddCount := 0 for _, number := range numbers { if number%2 == 0 { continue } oddCount++ fmt.Println("奇数:", number) } // 4) switch switch { case oddCount >= 4: fmt.Println("奇数很多") case oddCount >= 2: fmt.Println("奇数适中") default: fmt.Println("奇数较少") } }

过关标准(自检清单)

对照下面 6 条,能独立完成就算过关。

  1. 能写出 if / else,并通过改条件验证输出变化。
  2. 能解释 for 三段式的初始化、条件、步进。
  3. 能用 for range 遍历切片,并区分索引和值。
  4. 能正确使用 break 和 continue。
  5. 能用 switch 写多分支,并理解 default。
相关推荐
IT_陈寒16 分钟前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
OxYGC37 分钟前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php
小徐不徐说40 分钟前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
李纲明1 小时前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
第九序言T9 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设10 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒10 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
龙亘川11 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人11 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型