Avatar ·

Ist es sicher, Elemente aus einer map während der Iteration zu löschen?

Hallo zusammen! Ich habe gerade angefangen, Go zu lernen, und bin auf ein unerwartetes Verhalten bei der Arbeit mit map gestoßen. Ich muss alle Elemente einer map durchgehen und diejenigen löschen, die einer bestimmten Bedingung nicht entsprechen. In anderen Sprachen (z. B. Python) führt das Ändern eines Wörterbuchs während der Iteration oft zu Fehlern oder undefiniertem Verhalten. Ich habe diesen Code geschrieben: ```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) } ``` Der Code funktioniert und gibt `map[1:apple 3:cherry]` aus. Aber ich bin mir nicht sicher, ob das sicher ist. Kann dies zu einer Panik, einer Datenrace oder zum Überspringen von Elementen führen? In der Dokumentation habe ich gefunden, dass das Hinzufügen neuer Schlüssel während der Iteration Probleme verursachen kann, aber zum Löschen gibt es uneindeutige Aussagen. Könnt ihr mir bitte sagen, ob man das so machen kann?