Introdução: "Aaah, esse erro de novo!"
Se você já programou em Go, conhece essa sensação. Você acabou de escrever algumas linhas de código, inicia a compilação, e... o compilador joga na sua cara uma linha vermelha:
./main.go:10:2: x declared and not usedFamiliar? Esta é, provavelmente, a "dor de cabeça" mais popular dos iniciantes em Go. No Stack Overflow, essa pergunta acumulou milhares de visualizações, e não é à toa. Go é uma linguagem rigorosa. Se você declarou uma variável, mas não a usou, o compilador se recusa a compilar o programa. Nada de "bom, talvez sirva depois".
Mas não se desespere! Neste artigo, vamos analisar 5 maneiras comprovadas de vencer esse erro. Você aprenderá como lidar corretamente com variáveis, quais ferramentas ajudam a evitar o problema e como transformar esse "incômodo" em um hábito útil.
Vamos lá!
Por que Go é tão rigoroso?
Antes de combater o erro, vamos entender sua natureza. Ao contrário de Python ou JavaScript, onde uma variável não utilizada é apenas um aviso, em Go isso é um erro de compilação. Por quê?
- Limpeza do código. Go foi criado como uma linguagem para desenvolvimento industrial. Variáveis não utilizadas são lixo que dificulta a leitura e manutenção do código.
- Prevenção de bugs. Frequentemente, uma variável "declarada, mas não utilizada" é um sinal de que você esqueceu de fazer algo. O compilador captura esses momentos.
- Compilação rápida. Menos lixo — compilação mais rápida.
Agora que conhecemos o inimigo, vamos ver como vencê-lo.
Método 1: Blank Identifier — seu salva-vidas
A maneira mais simples e frequentemente usada é o blank identifier (identificador vazio) — o símbolo de sublinhado _. Ele diz ao compilador: "Eu sei que esta variável existe, mas não preciso dela, apenas ignore-a".
Exemplo: você chama uma função que retorna vários valores, mas precisa apenas de um.
package main
import "fmt"
func getData() (int, string) { return 42, "resposta secreta"}
func main() { // Precisamos apenas do número, ignoramos a string value, _ := getData() fmt.Println("Valor:", value)}Aqui, _ recebe a string, mas não a usa. Sem erro. Funciona!
Importante: _ não é uma "lixeira". É uma variável completa que não pode ser lida. Você não pode escrever fmt.Println(_) — isso também é um erro de compilação.
Quando usar: quando você tem certeza de que o valor retornado não é necessário. Por exemplo, ao chamar funções que retornam um erro, mas você está certo de que ele não ocorrerá (embora seja uma prática questionável).
Método 2: Apenas use a variável (o mais óbvio)
Parece banal, mas frequentemente declaramos uma variável e esquecemos de usá-la. Basta adicionar uma linha que a "consuma".
package main
import "fmt"
func main() { name := "João" // Erro: name declared and not used
// Correção: fmt.Println("Olá,", name)}Mas e se a variável for necessária apenas para algum cálculo intermediário e você não quiser exibi-la? Use _:
package main
func main() { result := calculateSomething() _ = result // Apenas "usa" a variável, sem fazer nada}
func calculateSomething() int { return 100}Essa é uma maneira válida. Mas parece uma gambiarra. Melhor repensar a lógica.
Método 3: Depuração com linters
A melhor defesa é o ataque. Em vez de corrigir erros após a compilação, use linters<