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

判断与循环

本章目标

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

常见坑位

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

  1. if 条件外面加了圆括号,写法不符合 Go 习惯。
  2. for 三段式里把条件写反,导致一次都不执行。
  3. breakcontinue 混用,结果和预期完全不一样。
  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. breakcontinue:中途控制循环
复制代码

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. 能正确使用 breakcontinue
  5. 能用 switch 写多分支,并理解 default
相关推荐
我命由我123457 分钟前
Jetpack Compose - Material Design 断点范围、WindowSizeClass、针对不同屏幕尺寸创建预览、四类导航栏
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
程序员-Benothing11 分钟前
MySQL 的存储引擎有哪些?它们之间有什么区别?
后端·mysql·面试·职场和发展
卷无止境25 分钟前
当Python遇上并发:concurrent.futures的核心逻辑与实战技巧
后端·python
captain37625 分钟前
多线程进阶
java·开发语言·数据库
卷无止境1 小时前
编程语言里到底有没有经济学规律?
后端·python
郑州光合科技余经理7 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
hboot9 小时前
AI工程师第六课 - RAG检索增强生成
后端·langchain·llm
码哥DFS10 小时前
二叉树的直径
开发语言·javascript·算法
mldong10 小时前
jeeflow:98KB 的工作流引擎长什么样
后端