Go04-控制结构

发布时间:2026/7/16 23:01:27
Go04-控制结构 第3章控制结构3.1 条件语句if 语句// 基本语法不需要括号ifage18{fmt.Println(成年人)}// 条件语句可以包含初始化语句ifscore:getScore();score90{fmt.Println(优秀)}elseifscore60{fmt.Println(及格)}else{fmt.Println(不及格)}多条件判断// 使用 和 ||ifage18age65{fmt.Println(劳动年龄)}ifdaySaturday||daySunday{fmt.Println(周末)}错误处理中的 if// Go 的惯用错误处理模式result,err:doSomething()iferr!nil{fmt.Println(发生错误:,err)return}// 使用错误变量作用域iferr:doSomethingElse();err!nil{fmt.Println(错误:,err)}3.2 switch 语句基本 switch// 基本语法switchday{caseMonday:fmt.Println(星期一)caseTuesday:fmt.Println(星期二)caseWednesday,Thursday,Friday:fmt.Println(工作日)default:fmt.Println(其他)}无条件 switch// 可以省略条件变量相当于 if-else 链switch{casescore90:gradeAcasescore80:gradeBcasescore70:gradeCcasescore60:gradeDdefault:gradeF}类型 switch// 接口类型断言funcprintType(xinterface{}){switchx.(type){caseint:fmt.Printf(整数: %d\n,x)casefloat64:fmt.Printf(浮点数: %f\n,x)casestring:fmt.Printf(字符串: %s\n,x)default:fmt.Printf(未知类型: %T\n,x)}}fallthrough// 使用 fallthrough 强制执行下一个 caseswitchnum:1;{casenum0:fmt.Println(正数)fallthroughcasenum-10:fmt.Println(大于 -10)// 注意fallthrough 不会检查下一个 case 的条件}3.3 循环语句Go 只有for循环但支持多种循环模式。基本 for 循环// 标准 for 循环fori:0;i10;i{fmt.Println(i)}// 循环条件sum:0fori:1;i100;i{sumi}fmt.Println(1到100的和:,sum)while 循环模拟// Go 没有 while但可以用 for 模拟n:10forn0{fmt.Println(n)n--}// 无限循环for{// 使用 break 退出ifsomeCondition{break}}range 循环// 遍历切片fruits:[]string{苹果,香蕉,橙子}forindex,value:rangefruits{fmt.Printf(索引: %d, 值: %s\n,index,value)}// 只需要值for_,value:rangefruits{fmt.Println(value)}// 只需要索引fori:rangefruits{fmt.Println(i)}// 遍历 mapuser:map[string]int{张三:25,李四:30,}forname,age:rangeuser{fmt.Printf(%s: %d岁\n,name,age)}// 遍历字符串处理 Unicodefori,r:rangeHello, 世界{fmt.Printf(索引: %d, 字符: %c, Unicode: %U\n,i,r,r)}break 和 continue// break - 退出循环fori:0;i100;i{ifi5{break// 退出循环}fmt.Println(i)}// continue - 跳过当前迭代fori:0;i10;i{ifi%20{continue// 跳过偶数}fmt.Println(i)// 只打印奇数}// 标签 - 退出多层循环outer:fori:0;i10;i{forj:0;j10;j{ifi*j20{breakouter// 退出外层循环}fmt.Printf(%d ,i*j)}fmt.Println()}3.4 defer 语句defer用于延迟执行函数调用常用于资源清理funcreadFile(filenamestring)error{file,err:os.Open(filename)iferr!nil{returnerr}deferfile.Close()// 函数返回前执行// 处理文件...returnnil}defer 执行顺序funcmain(){// defer 是后进先出LIFOdeferfmt.Println(1)deferfmt.Println(2)deferfmt.Println(3)// 输出3, 2, 1}defer 与命名返回值funcdouble(xint)(resultint){deferfunc(){result*2}()// 修改返回值returnx}fmt.Println(double(3))// 输出63.5 练习编写程序判断一个数是否为素数使用 switch 实现一个简单的计算器使用 for 循环打印九九乘法表编写程序使用 defer 实现函数执行时间统计3.6 下一章下一章我们将学习 Go 语言的函数与方法。