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.
Tipo | Intervalo |
---|---|
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.