Вебинар: Go-Go-Gadg...Error? Смотрим, как ошибаются Go разработчики! - 26.08
Анализатор обнаружил бинарное выражение, которое потенциально задумывалось как возведение в степень. Для проведения этой операции был выбран оператор ^, который на самом деле осуществляет побитовое исключающее "ИЛИ".
В некоторых языках программирования оператор ^ используется для операции возведения в степень — например, в Basic, R, Haskell. Однако в Go этот оператор вычисляет побитовое исключающее "ИЛИ" между двумя операндами (побитовая сумма по модулю 2). Для возведения числа в степень следует использовать функцию math.Pow. Также можно воспользоваться оператором побитового сдвига влево, если некоторое число умножается на 2 в степени N.
Рассмотрим пример ошибки:
x := 2 ^ 16
В данном примере будет присвоено значение 18, вместо значения, которому соответствует 2 в степени 16 (65536). Для того, чтобы получить степень числа 2 можно использовать побитовый сдвиг влево.
Исправленный вариант:
x := 1 << 16
Диагностическое правило классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V8015. |
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: