在Go中遍历map时删除元素是否安全?
大家好!我刚开始学习Go,在处理map时遇到了意外行为。我需要遍历map的所有元素并删除不符合特定条件的元素。在其他语言(例如Python)中,在迭代期间修改字典通常会导致错误或未定义行为。我写了这样的代码:
```go
package main
import "fmt"
func main() {
m := map[int]string{
1: "apple",
2: "banana",
3: "cherry",
4: "date",
}
for k, v := range m {
if v == "banana" || v == "date" {
delete(m, k)
}
}
fmt.Println(m)
}
```
代码可以运行并输出 `map[1:apple 3:cherry]`。但我不确定这是否安全。这会导致panic、data race或元素遗漏吗?我在文档中看到,在迭代期间添加新key可能会引起问题,但关于删除的说法不明确。请告诉我,这样做可以吗?