【Go语言基础【10】】循环语句:for、无限循环、for range、嵌套

发布时间:2026/11/3 9:22:18
【Go语言基础【10】】循环语句:for、无限循环、for range、嵌套 文章目录零、概述一、for循环基础1. 完整格式三部分控制2. 省略格式简化写法二、无限循环三、for range遍历四、嵌套循环五、循环控制语句1. break退出循环2. continue跳过本次迭代3. goto无条件跳转谨慎使用零、概述场景推荐写法示例代码固定次数循环完整格式for i:0; in; ifor i:0; i10; i { ... }条件循环类似while省略格式for condition { ... }for x100 { x * 2; }遍历集合for rangefor idx, val : range slice { ... }多层循环中断break labelouter: for { if cond { break outer; } }跳过当前迭代continueif val%20 { continue; }注意循环变量作用域完整格式中i : 0声明的变量作用域仅限循环体内。提前声明的循环变量如var i int作用域为外层块。for range的坑遍历切片时value是元素副本修改value不影响原切片需通过索引修改。遍历Map时每次迭代顺序不确定底层哈希表特性。性能优化避免在循环中执行高耗时操作如网络请求、文件IO。大切片遍历时可使用for i : 0; i len(slice); i替代for range避免复制值。一、for循环基础1. 完整格式三部分控制for[初始化语句];[条件表达式];[后置语句]{// 循环体}初始化语句设置循环变量初始值如i : 0仅执行一次。条件表达式决定循环是否继续如i 10每次循环前判断。后置语句更新循环变量如i每次循环后执行。示例计算1-100之和sum:0fori:1;i100;i{sumi}fmt.Println(总和,sum)// 输出50502. 省略格式简化写法1省略初始化语句variint1// 提前声明循环变量for;i10;i{// 省略初始化部分fmt.Print(i, )}2省略后置语句fori:1;i10;{// 省略 i在循环体内更新fmt.Print(i, )i}3完全省略类似while循环sum:1forsum100{// 仅保留条件表达式等价于 while(sum 100)sum*2// 循环体内更新变量}fmt.Println(最终值,sum)// 输出128二、无限循环省略条件表达式即可实现无限循环需通过break、return等语句退出。语法形式for{// 无限循环// 循环体ifcondition{break// 满足条件时退出}}示例模拟重试机制attempts:0for{ifattempts3{fmt.Println(重试失败)break}fmt.Println(尝试第,attempts1,次)ifsuccess:tryOperation();success{// 假设 tryOperation 返回是否成功fmt.Println(操作成功)break}attempts}三、for range遍历for range是Go语言特有的遍历方式可迭代数组、切片、Map、字符串、通道Channel等数据结构。语法格式for[index,value]:rangeiterable{// 循环体}数组/切片index为索引value为元素值副本。Mapindex为键Keyvalue为值Value。字符串index为字节偏移量value为 Unicode 码点rune类型。示例遍历切片和Map1遍历切片nums:[]int{1,3,5,7}foridx,num:rangenums{nums[idx]num*2// 通过索引修改原切片fmt.Printf(索引 %d值 %d\n,idx,num)}fmt.Println(修改后的切片,nums)// 输出[2 6 10 14]2遍历Mapuser:map[string]int{Alice:25,Bob:30}forname,age:rangeuser{fmt.Printf(%s 的年龄是 %d\n,name,age)}// 输出顺序不固定可能为// Alice 的年龄是 25// Bob 的年龄是 303遍历字符串Unicode支持str:Go语言foridx,r:rangestr{// r 为 rune 类型代表 Unicode 字符fmt.Printf(字符 %c 位于字节位置 %d\n,r,idx)}// 输出// 字符 G 位于字节位置 0// 字符 o 位于字节位置 1// 字符 语 位于字节位置 2UTF-8编码占3字节// 字符 言 位于字节位置 5UTF-8编码占3字节四、嵌套循环在循环体内包含另一个循环适用于需要多层迭代的场景如矩阵运算、生成表格等。示例1打印九九乘法表fori:1;i9;i{forj:1;ji;j{fmt.Printf(%d×%d%-3d,j,i,i*j)// %-3d 左对齐宽度3}fmt.Println()// 每行结束换行}示例2查找素数埃拉托斯特尼筛法max:100isPrime:make([]bool,max1)//make//用于创建并初始化引用类型切片、map、通道。//它会为这些类型分配内存空间并返回一个初始化后的类型实例非 nil。fori:2;imax;i{isPrime[i]true// 初始化为素数}fori:2;i*imax;i{// 只检查到平方根ifisPrime[i]{forj:i*i;jmax;ji{// 标记非素数isPrime[j]false}}}// 输出结果fmt.Print(素数列表)fori:2;imax;i{ifisPrime[i]{fmt.Print(i, )}}五、循环控制语句1. break退出循环作用终止当前循环跳出循环体。标签用法在嵌套循环中break [标签]可退出指定标签的外层循环。示例带标签的breakouter:fori:0;i3;i{forj:0;j3;j{ifi1j1{breakouter// 退出外层循环}fmt.Printf((%d, %d) ,i,j)}}// 输出(0,0) (0,1) (0,2) (1,0)2. continue跳过本次迭代作用跳过当前迭代的剩余语句直接进入下一次迭代。示例打印奇数fori:1;i10;i{ifi%20{continue// 跳过偶数}fmt.Print(i, )// 输出1 3 5 7 9}3. goto无条件跳转谨慎使用作用跳转到指定标签Label处执行代码可能破坏代码结构需谨慎使用。示例错误处理中的快速跳转file,err:os.Open(data.txt)iferr!nil{gotoERROR// 跳转到错误处理标签}// 处理文件逻辑file.Close()returnERROR:fmt.Println(打开文件失败,err)

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询