Анализатор обнаружил фрагмент кода, который может содержать логическую ошибку. В тексте программы присутствует бинарное выражение, в котором левое и правое подвыражение одинаковы. В качестве оператора такого выражения могут быть: <, >, <=, >=, ==, !=, &&, ||, -, /, &, | или ^.
Рассмотрим пример:
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)) {
....
}
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V8001. |
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:
Испытай
удачу!