V8015. Suspicious use of the bitwise XOR operator '^'. The exponentiation operation may have been intended here.
Анализатор обнаружил бинарное выражение, которое потенциально задумывалось как возведение в степень. Для проведения этой операции был выбран оператор ^, который на самом деле осуществляет побитовое исключающее "ИЛИ".
В некоторых языках программирования оператор ^ используется для операции возведения в степень — например, в Basic, R, Haskell. Однако в Go этот оператор вычисляет побитовое исключающее "ИЛИ" между двумя операндами (побитовая сумма по модулю 2). Для возведения числа в степень следует использовать функцию math.Pow. Также можно воспользоваться оператором побитового сдвига влево, если некоторое число умножается на 2 в степени N.
Рассмотрим пример ошибки:
x := 2 ^ 16
В данном примере будет присвоено значение 18, вместо значения, которому соответствует 2 в степени 16 (65536). Для того, чтобы получить степень числа 2 можно использовать побитовый сдвиг влево.
Исправленный вариант:
x := 1 << 16