Общие операторы: о целочисленных делениях и операциях с остатком
Предположим, что x и y — два операнда одного и того же целочисленного типа, целочисленное частное q( = x / y) и остаток r( = x % y) удовлетворяют x == q*y + r, где |r| < |y|. Если r не равен нулю, его знак такой же, как x (делимое). Результат x / y усекается до нуля.
Если делитель y является константой, он не должен быть равен нулю. Если делитель равен нулю во время выполнения и является целым числом, возникает паника во время выполнения. Паника подобна исключениям в некоторых других языках.
Пример:
Использование op= для бинарных арифметических операторов
Для бинарного арифметического оператора op можно x = x op y сократить до x op= y. В краткой форме x будет оцениваться только один раз.
Пример:
Операторы инкремента ++ и декремента --
Как и многие другие популярные языки, Go также поддерживает операторы инкремента ++ и декремента -- .Однако операции с использованием двух операторов не возвращают никаких результатов, поэтому такие операции нельзя использовать в качестве выражений. Единственным операндом, задействованным в такой операции, должно быть числовое значение. Числовое значение не должно быть константой, а оператор ++ или -- должен следовать за операндом.
Пример:
Оператор конкатенации строк
Как упоминалось выше, оператор сложения также может использоваться для конкатенации строк.
Оператор | Имя | Требования к двум операндам |
+ | конкатенация строк | Оба операнда должны быть значениями одного и того же строкового типа. |
Форма op= также применяется для оператора конкатенации строк.
Пример:
Если один из двух операндов операции конкатенации строк является типизированной строкой, то тип результирующей строки совпадает с типом типизированной строки. Если оба операнда являются нетипизированными (постоянными) строками, результатом также является нетипизированное строковое значение.
Булевые (логические) операторы
Go поддерживает два логических бинарных оператора и один логический унарный оператор.
Оператор | Имя | Требования к двум операндам |
&& | логическое и (бинарное), также известное как условное и | Оба операнда должны быть значениями одного и того же логического типа. |
|| | логическое или (двоичное), также известное как условное или | |
! | логическое не (унарный) | Тип единственного операнда должен быть логическим. |
Мы можем использовать оператор !=, представленный в следующей подглаве, как логический оператор xor.
Объяснения механизма
Если один из двух операндов является типизированным логическим значением, то тип результирующего логического значения совпадает с типом типизированного логического значения. Если оба операнда являются нетипизированными логическими значениями, результатом также является нетипизированное логическое значение.
Операторы сравнения
Go поддерживает шесть бинарных операторов сравнения:
Оператор | Имя | Требования к двум операндам |
== | равно | Как правило, типы его двух операндов должны быть одинаковыми. |
!= | не равно | |
< | меньше, чем | Оба операнда должны быть значениями одного целочисленного типа, типа с плавающей запятой или строкового типа. |
<= | меньше или равно | |
> | больше, чем | |
>= | больше или равно |
Тип результата любой операции сравнения всегда является нетипизированным логическим значением. Если оба операнда операции сравнения являются постоянными, результатом также является постоянное (логическое) значение.
Позже, если мы говорим, что два значения сравнимы, мы имеем в виду, что их можно сравнить с операторами \== и != .
Обрати внимание, что не все действительные числа могут быть точно представлены в памяти, поэтому сравнение двух значений с плавающей запятой (или комплексных) может быть ненадежным. Мы должны проверить, меньше ли абсолютная разница между двумя значениями с плавающей запятой, чем небольшой порог, чтобы судить, равны ли два значения с плавающей запятой.
Приоритет оператора
Ниже приведен приоритет операторов в Go. Верхние имеют более высокий приоритет. Операторы в одной строке имеют одинаковый приоритет. Как и многие другие языки, () может использоваться для повышения приоритета.
Одно очевидное отличие Go от некоторых других популярных языков заключается в том, что приоритет << и >> выше, чем + и - .