0

0

Golang如何理解for range与普通for循环区别_Golang循环语法详解与示例

P粉602998670

P粉602998670

发布时间:2025-11-06 02:15:11

|

1049人浏览过

|

来源于php中文网

原创

普通for循环灵活控制迭代,支持初始化、条件和递增;2. for range专用于遍历集合,语法简洁但每次迭代复制元素;3. 普通for性能更高,适合复杂控制,for range更安全易读。

golang如何理解for range与普通for循环区别_golang循环语法详解与示例

for range 和普通 for 是 Go 语言中两种常见的循环方式,它们在用途、性能和底层行为上有明显区别。理解这些差异有助于写出更清晰、高效的代码。

1. 普通 for 循环:灵活控制迭代过程

Go 的普通 for 循环类似于 C 或 Java 中的 for,语法灵活,支持初始化、条件判断和递增三个部分:

for 初始化; 条件; 递增 {
    // 循环体
}

也可以只保留条件,类似 while:

for 条件 {
    // 循环体
}

示例:遍历切片并打印索引和值

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

nums := []int{10, 20, 30}
for i := 0; i < len(nums); i++ {
    fmt.Println(i, nums[i])
}

这种写法完全由开发者控制循环变量,适合需要精确控制步长、反向遍历或跳过某些元素的场景。

2. for range:专为集合设计的便捷遍历方式

for range 是 Go 特有的语法糖,用于遍历数组、切片、字符串、map 和通道。它自动处理长度和边界,代码更简洁安全。

基本语法:

for 索引, 值 := range 集合 {
    // 使用索引和值
}

示例:使用 range 遍历切片

降迹灵AI
降迹灵AI

用户口碑TOP级的降AIGC率、降重平台

下载
nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}

如果只需要值,可以忽略索引:

for _, v := range nums {
    fmt.Println(v)
}

遍历 map 时,顺序是随机的(出于安全考虑),每次运行可能不同。

3. 关键区别与注意事项

以下是两者主要差异点:

  • 数据复制行为:range 在遍历时会对每个元素进行值拷贝。对于大结构体,建议使用指针避免开销。
  • 迭代变量复用:range 使用同一个变量存储每次迭代的值,这在 goroutine 中容易出错。例如:
for i, v := range nums {
    go func() {
        fmt.Println(i, v) // 可能都输出最后一组值
    }()
}

正确做法是传参:

for i, v := range nums {
    go func(i int, v int) {
        fmt.Println(i, v)
    }(i, v)
}
  • 性能方面:对切片使用普通 for 可以避免 range 的额外检查,在高性能场景中略优。
  • 适用范围:普通 for 主要用于数值计数或索引访问;range 更适合遍历集合类型。

4. 实际使用建议

大多数情况下推荐使用 for range,因为:

  • 代码更简洁,不易越界
  • 自动适应集合长度变化(如 append 后)
  • 语义清晰,明确表达“遍历”意图

但在以下情况考虑普通 for:

  • 需要反向遍历
  • 跳跃式访问(如每隔一个元素)
  • 配合 break/continue 实现复杂逻辑控制
  • 追求极致性能且数据量大

基本上就这些。掌握两者的适用场景,能让 Go 代码既安全又高效。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

651

2023.06.15

java流程控制语句有哪些
java流程控制语句有哪些

java流程控制语句:1、if语句;2、if-else语句;3、switch语句;4、while循环;5、do-while循环;6、for循环;7、foreach循环;8、break语句;9、continue语句;10、return语句。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

453

2024.02.23

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

725

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

441

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

426

2023.08.02

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

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

精品课程

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

共23课时 | 2万人学习

C# 教程
C# 教程

共94课时 | 5.2万人学习

Java 教程
Java 教程

共578课时 | 37.1万人学习

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

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