第三章流程控制3.1 条件语句if语句packagemainimportfmtfuncmain(){score:85// 基本if语句ifscore60{fmt.Println(及格)}// if-else语句ifscore90{fmt.Println(优秀)}else{fmt.Println(还需努力)}// if-else if-else语句ifscore90{fmt.Println(优秀)}elseifscore80{fmt.Println(良好)}elseifscore70{fmt.Println(中等)}elseifscore60{fmt.Println(及格)}else{fmt.Println(不及格)}// if语句带初始化语句ifnum:10;num%20{fmt.Printf(%d是偶数\n,num)}else{fmt.Printf(%d是奇数\n,num)}}switch语句packagemainimport(fmttime)funcmain(){// 基本switchday:time.Now().Weekday()switchday{casetime.Monday:fmt.Println(星期一)casetime.Tuesday:fmt.Println(星期二)casetime.Wednesday:fmt.Println(星期三)casetime.Thursday:fmt.Println(星期四)casetime.Friday:fmt.Println(星期五)casetime.Saturday,time.Sunday:fmt.Println(周末)default:fmt.Println(未知)}// 多条件匹配month:time.Now().Month()switchmonth{casetime.March,time.April,time.May:fmt.Println(春天)casetime.June,time.July,time.August:fmt.Println(夏天)casetime.September,time.October,time.November:fmt.Println(秋天)casetime.December,time.January,time.February:fmt.Println(冬天)}// 无条件switchscore:85switch{casescore90:fmt.Println(优秀)casescore80:fmt.Println(良好)casescore70:fmt.Println(中等)casescore60:fmt.Println(及格)default:fmt.Println(不及格)}// 类型switchvarxinterface{}helloswitchv:x.(type){caseint:fmt.Printf(x是int: %d\n,v)casestring:fmt.Printf(x是string: %s\n,v)casebool:fmt.Printf(x是bool: %v\n,v)default:fmt.Printf(x是未知类型: %T\n,v)}// fallthrough关键字num:1switchnum{case1:fmt.Println(一)fallthroughcase2:fmt.Println(二)fallthroughcase3:fmt.Println(三)}// 输出: 一 二 三}3.2 循环语句for循环packagemainimportfmtfuncmain(){// 基本for循环fmt.Println(基本for循环:)fori:1;i5;i{fmt.Printf(%d ,i)}fmt.Println()// while风格循环fmt.Println(while风格循环:)count:1forcount5{fmt.Printf(%d ,count)count}fmt.Println()// 无限循环fmt.Println(无限循环 (使用break退出):)sum:0for{sum1ifsum5{break}fmt.Printf(%d ,sum)}fmt.Println()// range遍历数组fmt.Println(range遍历数组:)arr:[]int{10,20,30,40,50}forindex,value:rangearr{fmt.Printf(索引: %d, 值: %d\n,index,value)}// range遍历字符串fmt.Println(range遍历字符串:)str:Hello, 世界fori,ch:rangestr{fmt.Printf(索引: %d, 字符: %c\n,i,ch)}// range遍历mapfmt.Println(range遍历map:)scores:map[string]int{张三:90,李四:85,王五:95,}forname,score:rangescores{fmt.Printf(姓名: %s, 分数: %d\n,name,score)}// range遍历channelfmt.Println(range遍历channel:)ch:make(chanint,3)ch-1ch-2ch-3close(ch)forv:rangech{fmt.Printf(%d ,v)}fmt.Println()}break和continuepackagemainimportfmtfuncmain(){// break示例fmt.Println(break示例:)fori:1;i10;i{ifi5{break}fmt.Printf(%d ,i)}fmt.Println()// continue示例fmt.Println(continue示例 (跳过偶数):)fori:1;i10;i{ifi%20{continue}fmt.Printf(%d ,i)}fmt.Println()// 带标签的breakfmt.Println(带标签的break:)outer:fori:1;i3;i{forj:1;j3;j{ifi2j2{breakouter}fmt.Printf((%d,%d) ,i,j)}}fmt.Println()// 带标签的continuefmt.Println(带标签的continue:)outer2:fori:1;i3;i{forj:1;j3;j{ifj2{continueouter2}fmt.Printf((%d,%d) ,i,j)}}fmt.Println()}3.3 goto语句packagemainimportfmtfuncmain(){i:0loop:ifi5{fmt.Printf(%d ,i)igotoloop}fmt.Println()}3.4 defer语句packagemainimportfmtfuncmain(){// defer基本用法fmt.Println(开始)deferfmt.Println(defer 1)deferfmt.Println(defer 2)deferfmt.Println(defer 3)fmt.Println(结束)// 输出顺序: 开始 结束 defer 3 defer 2 defer 1// defer用于资源清理fmt.Println(\n文件操作示例:)fmt.Println(打开文件)deferfmt.Println(关闭文件)fmt.Println(读取文件)fmt.Println(处理数据)// defer与匿名函数fmt.Println(\ndefer与匿名函数:)x:10deferfunc(){fmt.Printf(defer中的x: %d\n,x)}()x20fmt.Printf(修改后的x: %d\n,x)// defer执行顺序fmt.Println(\ndefer执行顺序:)fori:0;i5;i{deferfmt.Printf(%d ,i)}fmt.Println()}3.5 实战案例成绩统计系统packagemainimport(fmtsort)// Student 学生结构体typeStudentstruct{NamestringScoreint}funcmain(){// 学生成绩数据students:[]Student{{张三,90},{李四,85},{王五,95},{赵六,78},{钱七,92},{孙八,88},{周九,76},{吴十,98},}// 统计信息vartotalScoreintmaxScore:students[0].Score minScore:students[0].Score maxStudent:students[0].Name minStudent:students[0].Name// 成绩等级统计gradeCount:map[string]int{优秀:0,良好:0,中等:0,及格:0,不及格:0,}// 遍历统计for_,student:rangestudents{totalScorestudent.Score// 更新最高分和最低分ifstudent.ScoremaxScore{maxScorestudent.Score maxStudentstudent.Name}ifstudent.ScoreminScore{minScorestudent.Score minStudentstudent.Name}// 统计等级switch{casestudent.Score90:gradeCount[优秀]casestudent.Score80:gradeCount[良好]casestudent.Score70:gradeCount[中等]casestudent.Score60:gradeCount[及格]default:gradeCount[不及格]}}// 计算平均分avgScore:float64(totalScore)/float64(len(students))// 按成绩排序sortedStudents:make([]Student,len(students))copy(sortedStudents,students)sort.Slice(sortedStudents,func(i,jint)bool{returnsortedStudents[i].ScoresortedStudents[j].Score})// 输出结果fmt.Println(strings.Repeat(,50))fmt.Println(学生成绩统计系统)fmt.Println(strings.Repeat(,50))fmt.Printf(\n学生总数: %d\n,len(students))fmt.Printf(总分: %d\n,totalScore)fmt.Printf(平均分: %.2f\n,avgScore)fmt.Printf(最高分: %d (%s)\n,maxScore,maxStudent)fmt.Printf(最低分: %d (%s)\n,minScore,minStudent)fmt.Println(\n成绩等级分布:)forgrade,count:rangegradeCount{ifcount0{percentage:float64(count)/float64(len(students))*100fmt.Printf( %s: %d人 (%.1f%%)\n,grade,count,percentage)}}fmt.Println(\n成绩排名:)fori,student:rangesortedStudents{fmt.Printf( 第%d名: %s - %d分\n,i1,student.Name,student.Score)}fmt.Println(strings.Repeat(,50))}