☰
【Go入门练中学】第2课:条件与循环
2026/10/12 2:18:07 网站建设 项目流程

本课目标:掌握 if、for、switch;理解 Go 循环只有 for;能用条件与循环完成猜数字小游戏。


一、知识点速览

  1. if 条件分支
ifscore>=90{fmt.Println("优秀")}elseifscore>=60{fmt.Println("及格")}else{fmt.Println("不及格")}

带初始化语句:

ifx:=10;x>5{fmt.Println(x)}

注意:条件不需要括号,但必须有大括号 {}。

  1. for 循环

Go 只有 for,没有 while、do-while。

// 标准fori:=0;i<5;i++{fmt.Println(i)}// 类似 whilei:=0fori<5{fmt.Println(i)i++}// 无限循环for{// ...}// range 遍历nums:=[]int{10,20,30}fori,v:=rangenums{fmt.Println(i,v)}
  1. switch 分支
switchday{case1,2,3,4,5:fmt.Println("工作日")case6,7:fmt.Println("周末")default:fmt.Println("无效")}

无表达式 switch:

switch{casescore>=90:fmt.Println("优秀")casescore>=60:fmt.Println("及格")default:fmt.Println("不及格")}

fallthrough:强制执行下一个 case。

  1. 猜数字小游戏示例
packagemainimport("fmt""math/rand""time")funcmain(){rand.Seed(time.Now().UnixNano())// Go 1.20+ 可省略target:=rand.Intn(100)+1varguessintfor{fmt.Print("猜一个1-100的数字:")fmt.Scanln(&guess)ifguess>target{fmt.Println("大了")}elseifguess<target{fmt.Println("小了")}else{fmt.Println("猜对了!")break}}}

二、多元化习题(每题后附答案与解读)

A. 选择题

  1. Go 中 if 条件是否需要括号?
    A. 需要
    B. 不需要
    C. 可要可不要
    D. 必须用括号

答案:B
解读: Go 的 if 条件不需要括号,但必须有大括号 {}。


  1. Go 中循环关键字有哪些?
    A. for、while
    B. for、do-while
    C. 只有 for
    D. loop

答案:C
解读: Go 只有 for 循环,没有 while 和 do-while。


  1. switch 中用于强制执行下一个 case 的关键字是?
    A. break
    B. continue
    C. fallthrough
    D. next

答案:C
解读: fallthrough 会无条件执行下一个 case。


  1. for range 遍历字符串时,返回什么?
    A. 索引和字节
    B. 索引和 rune
    C. 只有值
    D. 只有索引

答案:B
解读: for range 遍历字符串返回索引和 rune(Unicode 码点)。


  1. 无限循环写法是?
    A. for(;😉
    B. while(true)
    C. for {}
    D. loop {}

答案:C
解读: Go 中无限循环用 for {}。


B. 判断题

  1. if 语句的条件必须用括号括起来。
    答案:错
    解读: Go 不需要括号,直接写 if x > 0 { … }。

  1. for 循环可以替代 while 循环。
    答案:对
    解读: Go 没有 while,用 for 条件 {} 实现。

  1. switch 的 case 默认不会贯穿,除非使用 fallthrough。
    答案:对
    解读: Go 的 switch 每个 case 默认自带 break。

  1. break 可以跳出 switch 和 for。
    答案:对
    解读: break 用于跳出当前循环或 switch。

  1. continue 可以用于 switch。
    答案:错
    解读: continue 只能用于循环,不能用于 switch。

C. 填空题

  1. if 条件语句:if x > 0 ____ { … }
    答案:{
    解读: Go 的 if 条件后直接跟大括号。

  1. 标准 for 循环:for i := 0; i < 10; ____ { }
    答案:i++
    解读: 后置语句通常为 i++。

  1. 遍历切片:for ____, v := range nums { }
    答案:i 或索引变量名
    解读: range 返回索引和值。

  1. switch 中默认分支:____: fmt.Println(“默认”)
    答案:default
    解读: default 处理所有未匹配的情况。

  1. 跳出循环:____
    答案:break
    解读: break 跳出当前循环。

D. 代码阅读题

  1. 输出什么?
fori:=0;i<3;i++{fmt.Print(i," ")}

答案:0 1 2
解读: i 从 0 到 2。


  1. 输出什么?
x:=5ifx>3{fmt.Println("A")}else{fmt.Println("B")}

答案:A
解读: x > 3 为真。


  1. 输出什么?
fori:=0;i<5;i++{ifi==2{continue}fmt.Print(i," ")}

答案:0 1 3 4
解读: i == 2 时跳过本次循环。


  1. 输出什么?
switch2{case1:fmt.Print("A")case2:fmt.Print("B")fallthroughcase3:fmt.Print("C")default:fmt.Print("D")}

答案:BC
解读: 匹配 case 2 输出 B,fallthrough 继续执行 case 3 输出 C。


  1. 输出什么?
sum:=0fori:=1;i<=5;i++{sum+=i}fmt.Println(sum)

答案:15
解读: 1+2+3+4+5=15。


E. 改错题

  1. 下面代码错在哪?
ifx>0fmt.Println("正数")

答案:缺少大括号。

ifx>0{fmt.Println("正数")}

解读: Go 的 if 必须有大括号。


  1. 下面代码错在哪?
fori:=0;i<5;i++fmt.Println(i)

答案:缺少大括号。

fori:=0;i<5;i++{fmt.Println(i)}

解读: for 循环体必须用大括号。


  1. 下面代码错在哪?
ifx=5{fmt.Println("等于5")}

答案:应该用 == 比较。

ifx==5{fmt.Println("等于5")}

解读: = 是赋值,== 是比较。


  1. 下面代码错在哪?
switchx{case1:continue}

答案:continue 不能用于 switch。

switchx{case1:// 做其他事情}

解读: continue 只能用于循环。


F. 编程题

  1. 判断一个数是正数、负数还是零。
packagemainimport"fmt"funcmain(){varnintfmt.Print("请输入一个整数:")fmt.Scanln(&n)ifn>0{fmt.Println("正数")}elseifn<0{fmt.Println("负数")}else{fmt.Println("零")}}

解读: 使用 if-else if-else 完成多分支判断。


  1. 打印 1 到 100 之间所有偶数。
fori:=1;i<=100;i++{ifi%2==0{fmt.Print(i," ")}}

解读: i%2 == 0 判断偶数。


  1. 使用 switch 判断成绩等级:90-100 优秀,80-89 良好,60-79 及格,0-59 不及格。
varscoreintfmt.Scanln(&score)switch{casescore>=90:fmt.Println("优秀")casescore>=80:fmt.Println("良好")casescore>=60:fmt.Println("及格")default:fmt.Println("不及格")}

解读: 使用无表达式 switch,条件写在 case 中。


G. 挑战题

  1. 猜数字小游戏:随机生成 1-100,循环让用户猜,提示大了小了,猜对后输出次数。
packagemainimport("fmt""math/rand""time")funcmain(){rand.Seed(time.Now().UnixNano())// Go 1.20+ 可省略target:=rand.Intn(100)+1varguessintcount:=0for{fmt.Print("猜一个1-100的数字:")fmt.Scanln(&guess)count++ifguess>target{fmt.Println("大了")}elseifguess<target{fmt.Println("小了")}else{fmt.Printf("猜对了!你用了%d次\n",count)break}}}

解读: 使用 for 无限循环,break 跳出。


  1. 打印九九乘法表。
fori:=1;i<=9;i++{forj:=1;j<=i;j++{fmt.Printf("%d*%d=%d\t",j,i,i*j)}fmt.Println()}

解读: 嵌套循环,外层控制行,内层控制列。


H. 拓展思考题

  1. Go 为什么没有 while 循环?
    答案: Go 设计者认为 for 足够灵活,可以用 for 条件 {} 替代 while,减少关键字。
    解读: 简化语言,降低学习成本。

  1. switch 中的 fallthrough 有什么作用?
    答案: 强制执行下一个 case,不考虑条件。
    解读: 通常用于多个 case 共享逻辑。

下节预告:函数、数组、切片、map,做一个通讯录小练习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询