Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Зачем тестировщику нужна безопасность? - 16.04

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V8001. There are identical subexpressions to the left and to the right of the 'foo' operator.

03 Апр 2026

Анализатор обнаружил фрагмент кода, который может содержать логическую ошибку. В тексте программы присутствует бинарное выражение, в котором левое и правое подвыражение одинаковы. В качестве оператора такого выражения могут быть: <, >, <=, >=, ==, !=, &&, ||, -, /, &, | или ^.

Рассмотрим пример:

func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.R > 1 {
    ....
  }
  ....
}

В данном случае в условии есть два подвыражения rgb.R > 1, объединённые с помощью оператора &&. Допущена ошибка по невнимательности, поскольку нет смысла использовать одно и то же подвыражение несколько раз через логический оператор &&.

Корректный код, который не вызовет подозрений у анализатора, будет выглядеть так:

func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.B > 1 {
    ....
  }
  ....
}

Анализатор производит сравнение блоков с учётом перестановки частей выражения относительно операторов. Ошибка будет обнаружена и в следующем примере кода:

if len([]rune(name)) > maxlength && 
   maxlength < len([]rune(name)) {
  ....
}