[2 。如以下GO代码所示,这可能导致意外行为:
导入“ FMT” 键入mytype struct { 字段字符串 } func main(){ var阵列[10] mytype 对于_,e:= range数组{ e.field =“ foo” } 对于_,e:= range数组{ fmt.println(e.field) fmt.println(“ - ”) } } 在此示例中,目的是修改数组中每个元素的“字段”属性。但是,由于范围语句返回该值的副本,因此对本地副本进行了更改,并且不会影响原始数组。结果,输出将所有“字段”属性显示为具有默认值。
要解决此问题,您无法在范围循环中返回项目的地址。相反,您应该使用索引通过数组迭代,如下所示:mytype 对于IDX,_:= range Array { 数组[idx] .field =“ foo” } 对于_,e:= range数组{ fmt.println(e.field) fmt.println(“ - ”) } } 通过使用索引而不是for循环中的值,您确保对“字段”属性所做的更改反映在原始数组中。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3