Pular para o conteúdo principal

victorstein.dev

1/100 Dias de Golang - Tipos Básicos

Table of Contents

# Tipos em Golang

Na introdução da documentação do Go, temos a seguinte frase:

Go is a general-purpose language designed with systems programming in mind. It is strongly typed and garbage-collected and has explicit support for concurrent programming. Programs are constructed from packages, whose properties allow efficient management of dependencies.

Quero mostrar aqui o “It is strongly typed”, Go é uma linguagem de programação fortemente tipada, isso se refere-se a um sistema de tipos que impõe regras rigorosas sobre como os dados podem ser usados e manipulados. Linguagens fortemente tipadas exigem que o tipo de dados de uma variável seja explicitamente definido e que as operações entre diferentes tipos de dados sejam cuidadosamente controladas.

A linguagem Go já vem com diversos tipos de dados incorporados, conhecidos como tipos predefinidos. Eles são semelhantes aos tipos encontrados em outras linguagens, como booleanos, inteiros, números de ponto flutuante e strings. Existem também os Composite types que são: array, struct, slice, map, channel e outras. [1]

# Declaração de Variáveis

Em Go, a declaração de variáveis pode ser feita de diversas formas.

Declaração de forma explícita:

var nome string = "Victor"
var idade int = 29

Declaração de forma implícita, o tipo é inferido pelo compilador, mesma sintaxe do Walrus Operator do Python:

nome := "Victor"
idade := 29

Declaração de múltiplas variáveis:

var nome, sobrenome string = "Victor", "Stein"
var idade, anoNascimento int = 29, 1996

Toda variável no Go possui um valor default, que o próprio compilador atribui. Isso evita a ocorrência de vários erros.

Tipo Valor Default
int 0
float64 0.0
bool false
string ""

# Booleans

O tipo bool representa variáveis booleanas. Variáveis do tipo bool podem assumir um de dois valores: true ou false.

var active bool
var newUser bool = true

# Tipos Numéricos

Go possui vários tipos numéricos, incluindo inteiros e números de ponto flutuante. Segue material da documentação Go mostrando todos os tipos numéricos:

uint8       the set of all unsigned  8-bit integers (0 to 255)
uint16      the set of all unsigned 16-bit integers (0 to 65535)
uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

int8        the set of all signed  8-bit integers (-128 to 127)
int16       the set of all signed 16-bit integers (-32768 to 32767)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)

float32     the set of all IEEE 754 32-bit floating-point numbers
float64     the set of all IEEE 754 64-bit floating-point numbers

complex64   the set of all complex numbers with float32 real and imaginary parts
complex128  the set of all complex numbers with float64 real and imaginary parts

byte        alias for uint8
rune        alias for int32

O tipo rune é um alias para um int32 e ele é utilizado para representar caracteres Unicode. Um caractere Unicode pode ocupar mais de um byte, então o tipo rune garante a representação correta.

s := "é"
fmt.Println([]byte(s)) // [195 169] (dois bytes UTF-8)
fmt.Println([]rune(s)) // [233] (um único rune)

## Números complexos

Números complexos são representados por dois números de ponto flutuante, um para a parte real e outro para a parte imaginária. Em Go, os números complexos são representados por dois tipos: complex64 e complex128. É incomum aplicações que precisam de números complexos, mas é bom saber que Go tem suporte para eles.

var c complex64 = 5 + 7i
print(real(c))
print(imag(c))

# Strings

Strings são uma sequência de caracteres. Em Go, as strings são representadas por uma sequência de bytes. Uma string é uma sequência de bytes que representam caracteres Unicode. Em Go, as strings são imutáveis, o que significa que uma vez que uma string é criada, ela não pode ser alterada.

var nome string = "Victor"
var sobrenome string = "Stein"

# Uso de constantes

Constantes são valores que não podem ser alterados durante a execução do programa. Em Go, as constantes são declaradas usando a palavra-chave const.

const pi = 3.14159
const nome = "Victor"

Não é possível dizer ao compilador do Go que um valor calculado no runtime é uma constante. Por exemplo, o código abaixo não compila:

const pi = 3.14159
const raio = 5
const area = pi * raio * raio // Não vai funcionar

# Conversão explícita de tipos

Como comentei no início, Go é uma linguagem fortemente tipada, então é necessário fazer a conversão explícita de tipos. Go também não permite “promoção automática” de tipos, ou seja, se você tentar somar um int com um float64, o compilador irá reclamar.

var n1 int = 2
var n2 float64 = 3.4
var soma_1 float64 = float64(n1) + n2
var soma_2 int = n1 + int(n2)
print(soma_1, soma_2)

# Referências

  1. Documentação Go - Types
  2. Chapter 2 - Predeclared Types and Declarations Learning Go: An Idiomatic Approach to Real-World Go Programming
  3. Go Runes Explained!