После того, как я переберу слайс пользователя, мне нужно удалить некоторых пользователей из слайса на основании некоторого условия. Я буду многократно повторять этот пользовательский фрагмент, медленно удаляя некоторые элементы.
Я знаю, что из других языков небезопасно удалять элементы из коллекции во время зацикливания. Поэтому я сохраняю элементы, которые я хочу удалить, на карте toMutate
. Как только мой первоначальный цикл закончен, я продолжаю и пытаюсь удалить элементы из среза.
toMutate := make(map[int]User, 100)
for idx, u := range c.users {
if someCondition {
toMutate[idx] = u
}
}
Затем я вызываю эту функцию, чтобы удалить элементы из среза пользователя.
for idx, u := range toMutate {
c.users = append(c.users[:idx], c.users[idx+1:]...)
}
Теперь я получаю сообщение об ошибке:
паника: ошибка времени выполнения: границы среза выходят за пределы диапазона
Кажется, я знаю, почему я получаю ошибку. На каждой итерации я удаляю элемент из среза.
Так что теперь мое значение idx отключено, так как количество элементов изменилось.
Как вы справляетесь с такими ситуациями?