Go Fundamentos Básico
Tipos básicos e conversões
Go é uma linguagem fortemente tipada: cada variável tem um tipo fixo e o compilador não converte tipos automaticamente. Os tipos básicos mais usados são int, float64, string e bool. Diferente de linguagens como Python ou JavaScript, você precisa ser explícito ao misturar tipos — por exemplo, não pode somar um int com um float64 sem converter um dos dois.
A conversão entre tipos numéricos é feita com a sintaxe T(v), como float64(idade) ou int(preco). Já para converter entre string e números, a biblioteca padrão oferece o pacote strconv, com funções como strconv.Atoi, strconv.Itoa e strconv.ParseFloat. Tentar usar string(65) não dá "65", e sim o caractere 'A' — um erro clássico.
Outro ponto de atenção é o overflow: cada tipo tem um intervalo limitado. int8 vai de -128 a 127; somar 1 em 127 dá -128 silenciosamente. Já float64 tem precisão finita, então nem todo número decimal é representado exatamente. Entender esses limites evita bugs sutis.
Pontos-chave
- Go não faz conversão implícita entre tipos:
intefloat64não se misturam semT(v). - Use
strconv.Atoi/strconv.Itoapara converter entrestringeint, estrconv.ParseFloatparafloat64. string(65)retorna"A", não"65": para número → texto usestrconv.Itoa.- Cada tipo numérico tem limites; estourar um
int8causa overflow silencioso. boolsó aceitatrue/falsee não converte para número em Go.
package main
import (
"fmt"
"strconv"
)
func main() {
// Tipos básicos
var idade int = 30
var altura float64 = 1.75
var nome string = "Ana"
var ativo bool = true
fmt.Println(nome, idade, altura, ativo)
// Conversão explícita entre numéricos
alturaCm := altura * 100 // float64
alturaCmInt := int(alturaCm) // conversão explícita
fmt.Println("altura em cm (int):", alturaCmInt)
// int -> float64
media := float64(idade) / 2.0
fmt.Println("metade da idade:", media)
// string <-> número com strconv
texto := strconv.Itoa(idade) // int -> string
fmt.Printf("idade como string: %q\n", texto)
n, err := strconv.Atoi("42") // string -> int
if err != nil {
fmt.Println("erro:", err)
} else {
fmt.Println("42 + 1 =", n+1)
}
// Overflow em int8
var pequeno int8 = 127
pequeno++ // estoura o limite
fmt.Println("127++ em int8:", pequeno)
}