Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V8031. Using the call of the 'len' function as an index will result in an off-by-one error.

22 Июн 2026

Анализатор обнаружил потенциальный выход за границу массива из-за использования результата функции len в качестве индекса. Подобная ошибка приведёт к панике программы.

Рассмотрим пример такого кода:

func End(basicLits []*BasicLit) token.Pos { 
  return basicLits[len(basicLits)].End()
}

В коде хотят получить позицию последнего элемента слайса basicLits. Однако для слайса длины n допустимые индексы находятся в диапазоне от 0 до n - 1, поэтому обращение к basicLits[len(basicLits)] всегда приведёт к панике программы.

Исправленный код:

func End(basicLits []*BasicLit) token.Pos {
  if length := len(basicLits); length > 0 { 
    return basicLits[length - 1].End()
  }
  return token.NoPos
}

Если у функции есть предусловие, что она работает со слайсами ненулевой длины, то проверку length > 0 можно убрать.