Анализатор
slicesdelete из пакета golang.org/x/tools/go/analysis/passes/modernize находит места в коде, где стоит slices.Delete применить вместо ручного append.Что было раньше
Удаление элементов из среза выглядело так:
s = append(s[:i], s[j:]...)
Работает, но неочевидно. Нужно держать в голове, что именно здесь происходит, и при быстром чтении легко пропустить.
Что предлагает анализатор:
s = slices.Delete(s, i, j)
Тот же результат, но намерение читается сразу: удалить элементы с индекса
i по j.Важный нюанс
slices.Delete не просто сокращает длину среза. Она зануляет элементы между новой и старой длиной. Это защита от утечки памяти: старый append-вариант оставлял ссылки на объекты в «хвосте» среза, и сборщик мусора не мог их освободить. Именно поэтому анализатор отключён по умолчанию.Когда включать
Если в коде нет намеренной зависимости от того, что элементы за
len остаются в памяти включайте анализатор и применяйте замену. Для большинства случаев это просто улучшение читаемости и безопасности.Включить анализатор можно через флаг при запуске:
go vet -modernize.slicesdelete ./...
или в конфигурации
golangci-lint, если используете его в проекте.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction