Проверяет понимание безопасности итерации по map в Go и правил конкурентного доступа.
В Go можно изменять map (добавлять или удалять элементы) во время итерации по ней с помощью цикла for range. Однако это может привести к непредсказуемому поведению, так как порядок итерации по map не гарантирован и может меняться при модификации.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k, v := range m {
fmt.Println(k, v)
if k == "a" {
delete(m, "b") // удаление безопасно
m["d"] = 4 // добавление может быть не видно
}
}
fmt.Println(m)
}Для безопасной модификации map во время итерации рекомендуется сначала собрать все ключи в слайс, а затем изменять map по этим ключам. Если требуется конкурентный доступ, используйте мьютексы или sync.Map.
Изменение map во время итерации возможно, но чревато неопределенным поведением. Лучше избегать этого или использовать безопасные паттерны, такие как копирование ключей, чтобы гарантировать предсказуемость кода.