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
- Documentação Go - Types
- Chapter 2 - Predeclared Types and Declarations Learning Go: An Idiomatic Approach to Real-World Go Programming
- Go Runes Explained!