Antes de avançarmos sobre os conceitos da linguagem e como utiliza-la, falaremos sobre o que é o built-in, algumas linguagens oferecem funções, declarações pré-declaradas, não sendo necessário importar nenhum pacote especial ou de terceiros para o uso das mesmas.

Normalmente as linguagens implementam funções, tipos, para as tarefas mais básicas. o Go não sendo diferentes delas possui algumas pré-declarações, que daqui para a frente chamaremos apenas de built-in.

Agora que entendemos um pouco, falaremos sobre tipos pré-declarados pela linguagem, como eles nos ajudam e quais os tipos básicos.

O que são tipos?

Podemos pensar em tipos como um modelo para os nossos valores. Dentro da linguagem de Go, podemos criar tipos customizados, assim como usar os tipos básicos declarados pelo built-in. Os tipos são uma ferramenta extramente poderosa, permite a organização da aplicação. O type system da linguagem possui um abordagem um pouco minimalista, abordaremos mais sobre ele em outro momento.

Pré-declarados

O built-in possui 17 tipos pré-declarados sendo 15 deles tipos numéricos, mais a frente aprenderemos como criar os nossos próprios tipos, assim como criar e utilizar composições. Na versão desse artigo v1.18.3, a linguagem possui os seguintes tipos pré-declarados:

Booleanos

Valores booleanos é um tipo de dado que contém um de dois valores possíveis, usualmente denota true e false. Falaremos sobre operadores booleanos em outro artigo. O valor literal para booleanos é bool.

Inteiros numéricos

Comportam aqui todos os valores para inteiros, ou seja com sinais, e sem sinais unsigned.

  • Com sinal: int, int8, int16, int32, int64.
  • Sem sinal: uint, uint8, uint16, uint32, uint64,uintptr.

A diferença entre os tipos de int8 e uint8 até respectivamente int64 e uint64, é a quantidade de bytes alocado na memória.

TipoIntervalo
int8 (8-bit com sinal)-128 até 127
int16 (16-bit com sinal)-32768 até 32767
int32 (32-bit com sinal)-2147483648 até 2147483647
int64 (64-bit com sinal)-9223372036854775808 até 9223372036854775807
uint8 (8-bit sem sinal)0 até 255
uint16 (16-bit sem sinal)0 até 65535
uint32 (32-bit sem sinal)0 até 4294967295
uint64 (64-bit sem sinal)0 até 18446744073709551615

💡 Para tipos como int e uint e uintptr, a quantidade de bytes alocados depende da arquitetura do processador, em arquiteturas x32, tem o tamanho 4 bytes, já em arquiteturas x64, tem tamanho de 8 bytes.

Números de ponto flutuante

A maneira que o computador utiliza para expressar números reais, os tipos pré-declarados são: float32 e float64.

💡 Todos os valores numéricos são guardados seguindo o padrão da IEEE Standard for Floating-Point Arithmetic(IEEE 754). Clique aqui, para ler mais.

Números Complexos

Os números complexos são uma combinação entre a parte real e imaginária. Cada parte de um tipo complexo é um ponto flutuante, os valores pré-declarados são: complex64, complex128. Para o complex64, cada parte será um float32, no caso do complex128 cada parte será um float64.

Sequencia de caracteres (string)

Quando pensamos na lógica as strings são a representação de um pedaço de texto, porém quando falamos de memória, e como o Go guarda esses valores, devemos pensar em strings como sequencias de bytes em codificação UTF-8. Hoje a linguagem suporta dois tipos de strings literais:

  • Literal Interpretadas, simbolizada pelo conteúdo dentro de aspas duplas.
  • Literal Bruta(Raw value), simbolizada pelo conteúdo dentro de duas crases.
// Forma interpretada.
"Hello World"

// Forma bruta.
`Hello World
Multi Line`

Além desses tipos, possuímos também dois pseudônimos:

Bytes

byte em outras linguagens são tipos primitivos, porém no Go, é um pseudônimo para uint8, assim podemos dizer que, um byte é igual a um uint8.

Runas

rune é um pseudônimo para int32. Uma runa tem a intenção de guardar um ponto de Unicode, porém alguns carácteres são compostos por mais de um ponto. Assim ela pode ser expressa como um ou mais carácteres dentro de aspas simples.

Qual a diferença ente runas e strings?

Uma string literal como supracitado é codificada em UTF-8. Cada carácter de uma string normalmente tem entre 1-3 bytes, enquanto cada rune tem 4 bytes. Ao avançarmos falaremos mais sobre as outras diferenças.

signature