当前位置: GO > golang for range 遍历

golang for range 遍历

2025-07-25 分类:GO 作者:admin 阅读(20)

不同数据类型的遍历方式

  1. 数组/切片

  2. map

    • 遍历顺序是随机的(Go 有意设计)

  3. 字符串

  4. channel

range 遍历时返回的是元素的拷贝,不是原始元素的引用

for-range切片时候可以边遍历边append吗?

当遍历切片时候,可以边遍历边append操作,这并不会造成死循环。因为遍历之前已经确定了循环范围,遍历操作相当如下伪代码:

无论遍历数组还是切片,返回都是数组或切片中的值拷贝,所以修改v的值,最后都无效,使用item[i]或者指针这种方式才有效。

for-range映射时候可以边遍历,边新增或删除吗?

若在一个Goroutine里面边遍历边新增、删除,理论上是可以的,不会触发写检测的,新增的key-value可能会被访问到,也可能不会。

若多个Goroutine中进行遍历、新增、删除操作的话,是不可以的,是可能触发写检测的,然后直接panic。


map 的range 同切片,但是有一些特殊如下:

可以修改值,但不能修改 map 的结构(增删键),这是 Go map 遍历时最重要的规则。

  1. 允许的操作

    • 修改现有键对应的值(包括通过指针修改结构体字段)

    • 修改值内部的字段(如果值是可变的)

  2. 禁止的操作

    • 添加新键 (m["new"] = value)

    • 删除现有键 (delete(m, key))

    • 这些操作会改变 map 的结构,导致运行时 panic

map 的值类型 v 的性质 能否影响原 map 示例
intstringstruct(值类型) 值的拷贝 ❌ 不能 v = newVal 无效
*structslicemap(引用类型) 指针/引用的拷贝 ✅ 能 v.Field = newVal 有效

原因:虽然 v 本身是拷贝的指针,但它指向的是同一块内存。

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏

支付宝
微信
0

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 - golang for range 遍历

博客简介

精彩评论

  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    新增一个框架图! http://biji.jinli.vip/wp-content/upl...

    评:新文章!
  • 一位WordPress评论者(6年前 (2020-02-13))

    嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自...

    评:世界,您好!