Go 语言范围(Range)

Go 语言范围(Range)

概述

Go 语言中的 range 是一种用于遍历数组、切片、字符串等可遍历类型的方法。与其它语言中的循环结构不同,Go 的 range 更加强调于简化操作,并提供对集合元素内容的直接访问。

range 的用法

在 Go 语言中,range 关键字通常用于 for 循环中,以简化遍历过程。其基本语法如下:

go 复制代码
for i, v := range coll {
    // 处理 coll 中的元素
}

其中,coll 可以是任何可遍历的类型,如数组、切片、字符串或映射。

  • i 表示当前遍历元素的索引。
  • v 表示当前遍历元素的值。

range 的三种使用场景

  1. 遍历数组或切片
go 复制代码
arr := [3]int{1, 2, 3}
for i, v := range arr {
    fmt.Printf("索引: %d, 值: %d\n", i, v)
}
  1. 遍历字符串
go 复制代码
str := "Hello, World!"
for i, v := range str {
    fmt.Printf("索引: %d, 字符: %c\n", i, v)
}
  1. 遍历映射
go 复制代码
map1 := map[string]int{"one": 1, "two": 2, "three": 3}
for k, v := range map1 {
    fmt.Printf("键: %s, 值: %d\n", k, v)
}

range 的注意事项

  1. 不返回索引的遍历

如果你只想遍历集合中的值,而不关心索引,你可以省略索引变量 i:

go 复制代码
for _, v := range arr {
    // 只处理 arr 中的值
}
  1. 字符串遍历

字符串在 Go 语言中被视为字节序列,而不是字符序列。因此,遍历字符串时,返回的是字节值:

go 复制代码
for i, v := range "Hello" {
    fmt.Printf("索引: %d, 字节值: %d\n", i, v)
}
  1. 遍历切片时不会修改原始数据

在遍历切片时,不要在循环内部修改原始数据,这可能导致未定义的行为:

go 复制代码
s := []int{1, 2, 3}
for i := range s {
    s[i] *= 2 // 这将导致错误,因为切片的长度已经改变
}

总结

Go 语言的 range 关键字为遍历集合提供了简单而高效的方法。熟练掌握 range 的用法,能够让你在 Go 语言的编程过程中更加得心应手。在本文中,我们详细介绍了 range 的基本用法、三种使用场景以及注意事项,希望对您有所帮助。

相关推荐
星夜离尘562 小时前
MATLAB阶跃响应怎么量:别把最后一个采样点当成稳态
开发语言·matlab
云水初2 小时前
【agent篇】RAG Agent避坑指南(附高级RAG Agent汇总)
开发语言·笔记·python·学习·langchain·agent·rag
Littlehero_1212 小时前
QT自定义控件之水泥厂组态(源码开源)
开发语言·qt
辛苦才能2 小时前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
miller-tsunami3 小时前
STL简介&string相关知识点
开发语言·c++·string
半摆烂日常3 小时前
手机表单的左滑操作:触摸事件的处理细节
大数据·开发语言·人工智能·智能手机·https·c#
星夜离尘563 小时前
MATLAB滑动RMS如何接报警:窗口未满和缺样不能当成正常
开发语言·matlab
开开心心就好4 小时前
白天晚上自动调蓝光,护眼工具亮度可调
服务器·开发语言·算法·pdf·ocr·intellij-idea·idea
张张123y4 小时前
后端第十一课:RAG 落地实战(从 0 到 1 接上私有知识库,并设计一个好用的 RAG)
开发语言·人工智能·python·机器学习·fastapi·rag
梅梅绵绵冰4 小时前
JVM虚拟机
java·开发语言·jvm