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

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

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

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

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

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

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

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