for range?Да. Спецификация Go явно разрешает удалять ключи из map во время итерации по ней в for range. Удалённый ключ не будет посещён, если итерация до него ещё не дошла. Добавление новых ключей во время итерации тоже допустимо, но они могут быть посещены в этом проходе, а могут и нет - полагаться на это не следует.
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
if k == "b" {
delete(m, k)
}
}