Golang - Tipos de dados
Published: 2021-09-02 18:54:59

Os tipos de dados especificam os tipos de valores que serão usados em um programa. Os tipos do dados também determina quais operações podem ser executadas nesses dados. Uma forma de pensar sobre os tipos é considerar os diferentes dados que usamos no mundo real. Exemplos de dados no mundo real são os números:
- números naturais (0, 1, 2,…), usamos eles para contar (incluindo o zero) e é infinito;
- números inteiros (…, -1, 0, 1,…) são todos os elementos dos números naturais (N) e seus opostos;
- números irracionais (π), são os números decimais não exatos com uma representação infinita e não periódica, por exemplo: 3,141592… ou 1,203040….


Na linguagem Go precisamos informar o tipo, os principais tipos primitivos da linguagem são: string, boolean, inteiros e números de ponto flutuante.

**String**

O tipo String é o responsável por representar valores de texto.

```
var nome string
nome = "Diego"
```

**Boolean**

O tipo boolean é responsável por definir o valor de uma variável como `true` (verdadeiro) ou `false` (falso). Diferente de outras linguagens de programação, em Go, um boolean não pode ser representado por números ,0 e 1, por exemplo.

```
var ligado bool
ligado = true
```
Por padrão, quando declaramos um boolean e não definimos um valor inicial para ele, o mesmo passa a ter `false` como seu valor.


**Inteiros**

Os números inteiros são constituídos dos números naturais e seus simétricos negativos, incluindo o zero.

```
var ano int64
ano = 2021
```
Na linguagem Go, podemos declarar números inteiros com capacidades de bytes diferentes.

* rune : -2,147,483,648 ~ 2,147,483,647 
* int8 : -128 ~ 127
* int16 : -32,768 ~ 32,767
* int32 : -2,147,483,648 ~ 2,147,483,647
* int64 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

```
var runeVar rune = 255
var intVar int8 = 100
var intVar2 int16 = -200
var intVar3 int32 = 3000
var intVar4 int64 = -20000
```

Para números inteiros, existem aqueles que possuem capacidade apenas, para valores positivos.


* byte : 0 ~ 255 
* uint8 : 0 ~ 255 
* uint16 : 0 ~ 65,535
* uint32 : 0 ~ 4,294,967,295
* uint64 : 0 ~ 18,446,744,073,709,551,615  

```
var byteVar byte = 12
var uintVar uint8 = 35
var uintVar2 uint16 = 114
var uintVar3 uint32 = 1278
var uintVar4 uint64 = 27001
```

**Fracionários**

Os números fracionários são definidos como aqueles que representam uma ou mais partes do todo, isto é, ao dividir um objeto em um determinado número de partes, cada conjunto dessas partes é um número fracionário.

* float32 : -3.4^38 ~ +3.4^38
* float64 : -1.7^308 to +1.7^308 

Também chamamos comumente também de números de ponto flutuante ou float. A diferença de 32 ou 64, diz respeito a capacidade de armazenamento de dados na varíavel. Se serão 32 ou 64 bits de capacidade.

```
var varFloat32 float32 = 19.20
var varFloat64 float64 = 61.337
```

**Complexos**

Os números complexos são números compostos por uma parte real e uma imaginária. Eles representam o conjunto de todos os pares ordenados (x, y), cujos elementos pertencem ao conjunto dos números reais (R).

* complex64 : conjunto de todos os números complexos com partes reais e imaginárias do float32
* complex128 : conjunto de todos os números complexos com partes reais e imaginárias do float64


**Declaração de variáveis**

Existem diversas formas de sintaxe que podem ser utilizadas para definir variáveis em Go.

A palavra-chave `var` é a forma mais básica de definir variáveis. Observe que a linguagem Go coloca o tipo da variável depois do nome da variável.

```
// Define uma variável com o nome “variableName” e o tipo "type"
var variableName type
```

Definir múltiplas variáveis.

```
// Define três variáveis do tipo "type"
var vname1, vname2, vname3 type
```

Definir uma variável com um valor inicial.

```
// Define variável chamada “variableName”, tipo "type" e valor "value"
var variableName type = value
```

Definir múltiplas variáveis com valores iniciais.

```
/*
Define três variáveis de tipo "type" e inicializa seus valores.
vname1 recebe v1, vname2 recebe v2, vname3 recebe v3
*/
var vname1, vname2, vname3 type = v1, v2, v3
```

Variáveis declaradas sem um valor inicial explicitado darão seu valor zero. Zero para tipos numéricos, `false` para boleanos e "" (string vazia) para strings.

---

That's all folks! :v: