For loop 结构值不为';t随循环范围的变化而变化
我有一个for循环,它在For loop 结构值不为';t随循环范围的变化而变化,for-loop,go,struct,For Loop,Go,Struct,我有一个for循环,它在User的切片上迭代。但是: -当我使用withrange时,这是我的结果 for _, u := range users { val := calcMem(u.sessionid) // total += val u.setMem(val) } Result: [{user1 dp-tcp#64 2 0} {user2 dp-tcp#62 0} {user3 dp-tcp#83 4 0}] -当我使用简单的for循环时: for i := 0
User
的切片上迭代。但是:
-当我使用withrange
时,这是我的结果
for _, u := range users {
val := calcMem(u.sessionid)
// total += val
u.setMem(val)
}
Result:
[{user1 dp-tcp#64 2 0} {user2 dp-tcp#62 0} {user3 dp-tcp#83 4 0}]
-当我使用简单的for循环时:
for i := 0; i < len(users); i++ {
val := calcMem(users[i].sessionid)
// total += val
users[i].setMem(val)
}
Result:
[{user1 dp-tcp#64 2 5287.092000000001} {user2 dp-tcp#62 3589.383999999999} {user3 dp-tcp#83 4 3956.012}]
如果你有办法的话
for _, u := range users {
}
您将获得切片值的副本。所以,如果你改变它,你就改变这个副本
如果您愿意,可以按索引获取值并进行修改:
for i := range users {
users[i] = ....
}
与所有赋值一样,
范围
中的值变量是切片中值的副本。
for i := range users {
users[i] = ....
}