Avatar ·

É seguro deletar elementos de um map durante a iteração sobre ele em Go?

Olá a todos! Comecei a estudar Go recentemente e me deparei com um comportamento inesperado ao trabalhar com map. Preciso percorrer todos os elementos de um map e deletar aqueles que não atendem a uma condição específica. Em outras linguagens (por exemplo, Python), modificar um dicionário durante a iteração geralmente causa erros ou comportamento indefinido. Escrevi o seguinte código: ```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) } ``` O código funciona e imprime `map[1:apple 3:cherry]`. Mas não tenho certeza se isso é seguro. Isso pode causar pânico, condição de corrida ou pular elementos? Na documentação, encontrei que adicionar novas chaves durante a iteração pode causar problemas, mas sobre deletar é dito de forma ambígua. Por favor, me digam: é possível fazer isso?