Pular para o conteúdo principal

Operadores

8 min de leitura•Arquivado emLinguagem de Programação Goem

Domine os operadores de Go — aritméticos, de comparação, lógicos, bit a bit e de atribuição. Aprenda a precedência de operadores e como Go avalia expressões.

Expressões e operandos

Um operador é um símbolo que instrui o compilador a realizar uma operação específica. Os valores sobre os quais o operador age são chamados de operandos, e a combinação de operador e operandos é chamada de expressão.

Os operadores em Go existem em duas formas:

  • Operadores binários agem sobre dois operandos — um de cada lado: a + b, x == y
  • Operadores unários agem sobre um único operando, sempre escritos à esquerda: !x, &v, -n

As duas exceções são ++ e --, que são escritos à direita (postfix): i++, i--.

Operadores aritméticos

Operadores aritméticos realizam cálculos matemáticos em tipos numéricos.

OperadorDescriçãoExemplo
+Adiçãoa + b
-Subtraçãoa - b
*Multiplicaçãoa * b
/Divisãoa / b
%Resto (módulo)a % b

O operador + também funciona para concatenação de strings:

Operadores de comparação

Operadores de comparação comparam dois valores e retornam um bool.

OperadorDescriçãoExemplo
==Iguala == b
!=Diferentea != b
<Menor quea < b
<=Menor ou iguala <= b
>Maior quea > b
>=Maior ou iguala >= b

Operadores lógicos

Operadores lógicos combinam ou invertem expressões booleanas. São os blocos de construção da lógica condicional.

OperadorDescriçãoExemplo
&&AND — verdadeiro se ambos os operandos forem verdadeirosa && b
||OR — verdadeiro se ao menos um operando for verdadeiroa || b
!NOT — inverte um valor booleano!a

Operadores bitwise

Operadores bitwise trabalham diretamente na representação binária de inteiros, um bit por vez.

OperadorDescriçãoExemplo
&AND — bit é 1 somente se ambos os bits forem 1a & b
|OR — bit é 1 se qualquer um dos bits for 1a | b
^XOR — bit é 1 se exatamente um dos bits for 1a ^ b
&^AND NOT (bit clear) — limpa bits em a que estão definidos em ba &^ b

Quando usado como operador unário, ^ torna-se complemento bitwise — inverte todos os bits:

Operadores de bit shift

Operadores de shift movem os bits de um inteiro para a esquerda ou para a direita por um número especificado de posições.

OperadorDescriçãoExemplo
<<Left shift — desloca bits à esquerda, preenchendo com zerosa << n
>>Right shift — desloca bits à direitaa >> n

Cada left shift de 1 posição equivale a multiplicar por 2. Cada right shift de 1 posição equivale a dividir por 2:

Um uso prático é construir bit masks — padrões usados para testar, definir ou limpar bits específicos:

Outros operadores

Alguns operadores não se encaixam bem nas categorias acima.

++ e -- incrementam e decrementam uma variável numérica em 1. Em Go eles são statements, não expressões — você não pode usá-los no meio de uma expressão ou no lado esquerdo de uma atribuição:

Diferente de C e Java, Go suporta apenas a forma postfix: i++ é válido, ++i não é.

& (address-of) retorna o endereço de memória de uma variável, produzindo um ponteiro:

* (dereference) acessa o valor armazenado no endereço de um ponteiro:

<- (operador de channel) envia um valor para um channel ou recebe um valor dele:

Precedência de operadores

Quando uma expressão contém múltiplos operadores, Go os avalia em uma ordem definida. Maior precedência significa que o operador se associa mais fortemente — é avaliado primeiro.

PrecedênciaOperadores
5 (maior)* / % << >> & &^
4+ - | ^
3== != < <= > >=
2&&
1 (menor)||

Operadores unários têm a maior precedência de todos e sempre se associam ao operando imediato.

Na dúvida, use parênteses. Eles sobrescrevem a precedência e tornam a intenção explícita: