Go 语言中的 语法非常简洁,但在遍历切片(Slice)时,由于其底层的实现机制,存在几个经典的“坑”。 以下是主要的 5 个坑及其解决方案: 1. 坑一:修改 value 不会影响原切片(值拷贝) 这是新手最容易犯的错误。 中的 是切片元素的副本(值拷贝)。修改 的值,原本切片中的数据不会发生变化。 错误示例: 正确做法: 使用索引直接修改原切片。 或者,如果切片里存的是指针 ,那么 拷贝的是指针地址,修改 指向的内容是有效的。 --- 2. 坑二:循环变量的地址复用(Go 1.22 之前) 注意:这个问题在 Go 1.22 版本中已经修复(实验性特性 转正),但在 Go 1.21 及更早版本中非常致命。 在旧版本中, 循环的变量 在整个循环过程中是同一个变量,只是每次迭代时值被更新了。如果你在循环中获取 的地址(),你会发现所有地址都是一样的。 错误示例(Go < 1.22): 正确做法(兼容旧版本): 在循环内部定义一个新变量承接。 --- 3. 坑三:在 Goroutine 中使用循环变量(闭包捕获) 这其实是“地址复用”的衍生问题。如果在循环中启动 Goroutine ...