Avatar ·

在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可能会引起问题,但关于删除的说法不明确。请告诉我,这样做可以吗?