This question already has answers here:
Is it safe to remove selected keys from map within a range loop?
(4个答案)
1年前关闭。
我写了一些能做到这一点的代码,并且运行良好,但是在查看代码时,我意识到我所做的工作可能无法在其他语言下工作。
举一个人为的例子:
这将打印“1”和“2”,并且当我以后检查
因此,我觉得这样做很安全,但是我想知道为什么吗?
(4个答案)
1年前关闭。
我写了一些能做到这一点的代码,并且运行良好,但是在查看代码时,我意识到我所做的工作可能无法在其他语言下工作。
举一个人为的例子:
dict := map[string]string{ "a": "1", "b": "2" }
for key, val := range dict {
fmt.Println(val)
delete(dict, "b")
}
这将打印“1”和“2”,并且当我以后检查
dict
时,仅是{ "a": "1" }
。因此,我觉得这样做很安全,但是我想知道为什么吗?
range dict
是否在内部创建副本? 最佳答案
和往常一样,the spec是确定的答案。向下滚动到“对于带范围子句的语句”,第3项(强调我的):
关于go - 在迭代字典键时删除字典键是否安全? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56048259/
10-11 21:35