# 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 |

<- | receive | <-ch is the value received from channel ch |

## Comments

Be the first to comment!