# Go: Operators

See Operator precedence for evaluation order.

## Arithmetic

``````Operator   Name                 Types
--------   ----                 -----
+          sum                  integers, floats, complex values, strings
-          difference           integers, floats, complex values
*          product              integers, floats, complex values
/          quotient             integers, floats, complex values

%          remainder            integers
&          bitwise AND          integers
|          bitwise OR           integers
^          bitwise XOR          integers
&^         bit clear (AND NOT)  integers

<<         left shift           integer << unsigned integer
>>         right shift          integer >> unsigned integer
``````

See Arithmetic operators in the Go language specification for complete definitions of the shift, quotient and remainder operators, integer overflow, and floating point behavior.

## Comparison

Comparison operators compare two operands and yield an untyped boolean value.

``````Operator   Name                 Types
--------   ----                 -----
==         equal                comparable
!=         not equal            comparable

<          less                 integers, floats, strings
<=         less or equal        integers, floats, strings
>          greater              integers, floats, strings
>=         greater or equal     integers, floats, strings
``````
• Boolean, integer, floats, complex values and strings are comparable.
• Strings are ordered lexically byte-wise.
• Two pointers are equal if they point to the same variable or if both are nil.
• Two channel values are equal if they were created by the same call to make or if both are nil.
• Two interface values are equal if they have identical dynamic types and equal concrete values or if both are nil.
• A value x of non-interface type X and a value t of interface type T are equal if t’s dynamic type is identical to X and t’s concrete value is equal to x.
• Two struct values are equal if their corresponding non-blank fields are equal.
• Two array values are equal if their corresponding elements are equal.

## Logical

Logical operators apply to boolean values. The right operand is evaluated conditionally.

``````Operator   Name              Description
--------   ----              -----------
&&         conditional AND   p && q  denotes  "if p then q else false"
||         conditional OR    p || q  denotes  "if p then true else q"
!          NOT               !p      denotes  "not p"
``````

## Others

``````Operator   Name                  Description
--------   ----                  -----------
&          address of            &x generates a pointer to x
*          pointer indirection   *x denotes the variable pointed to by x