0

0

go语言循环_for三种形式与break/continue/标签使用详解

月夜之吻

月夜之吻

发布时间:2026-02-08 11:08:02

|

998人浏览过

|

来源于php中文网

原创

Go 的 for 只有一种语法但能模拟三种循环形式:for init; condition; post 形式(全写)、for condition 形式(类 while)、for 形式(无限循环),init、condition、post 均可省略。

go语言循环_for三种形式与break/continue/标签使用详解

Go 的 for 只有一种语法,但能模拟三种循环形式

Go 语言没有 whiledo-while 关键字,所有循环都靠 for 实现。它的底层只有一种结构:for [init; condition; post],但 init、condition、post 全部可省略,由此衍生出三种常用写法:

  • for i := 0; i —— 类 C 风格,带初始化、条件判断、后置操作
  • for condition —— 省略 init 和 post,等价于 while (condition);注意不能写成 for ; condition ;,虽合法但冗余
  • for —— 条件完全省略,变成无限循环,必须靠 breakreturn 退出

编译器对这三种写法不做区分,全部转为同一套控制流逻辑。少一个分号不是“语法糖”,而是语法规则允许的合法省略。

break 和 continue 只作用于最近的 for/switch,不跨函数

breakcontinue 在 Go 中只能跳出或跳过**当前正在执行的 for 或 switch 语句**,不会影响外层函数或其他控制结构。常见误用是以为它们能跳出 if 块或函数作用域 —— 实际上 if 不是循环/分支复合语句,break 在其中直接报错:break is not in a loop or switch

  • for 内嵌 switch 时,break 默认终止的是 switch,不是外层 for
  • continue 只能在 for 中使用,switch 内用会报错:continue is not in a loop
  • 若需从多层循环中提前退出,必须借助标签(见下节)

用标签(label)配合 break/continue 跳出指定 for 循环

Go 支持给 forswitchselect 打标签,格式为 LabelName:(冒号结尾),然后在 break LabelNamecontinue LabelName 中引用。标签名作用域仅限于其所在函数,且必须紧贴在循环语句前,中间不能有其他语句(包括空行、注释也不行)。

魔珐星云
魔珐星云

无需昂贵GPU,一键解锁超写实/二次元等多风格3D数字人,跨端适配千万级并发的具身智能平台。

下载

立即学习go语言免费学习笔记(深入)”;

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer // 直接跳出外层 for
        }
        fmt.Println(i, j)
    }
}
  • 标签名区分大小写,且不能与变量名冲突
  • continue LabelName 只适用于 for,对 switchselect 使用会报错
  • 标签不能跨函数跳转,也不能跳进某个循环内部(即不能从外部 goto 到循环中间)

for range 遍历要注意值拷贝和指针陷阱

for range 是 Go 最常用的遍历方式,但它隐式复制元素值。当遍历切片、数组、map 或 channel 时,range 返回的是每个元素的副本,不是原位置的引用。这意味着:

  • 修改 for range 中的循环变量(如 v)不会影响原数据
  • 取地址(&v)得到的是临时变量的地址,每次迭代都复用同一内存位置,所有指针最终指向最后一个值
  • 要修改原切片元素,必须用索引: slice[i] = newValue
  • 遍历 map 时顺序不保证,每次运行结果可能不同

容易忽略的一点:在 goroutine 中启动多个 for range 循环并捕获循环变量,若没显式传参或闭包捕获,很可能所有 goroutine 都看到同一个终值 —— 这不是 range 特有,而是 Go 闭包绑定变量而非值的通用行为。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

344

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

211

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

399

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

282

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

196

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

681

2025.06.17

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

39

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4.8万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号