«Passei uma hora quebrando a cabeça, e a solução tem três linhas»: como converter int para string em Go
\n\nImagine: você está escrevendo um microsserviço em Go, processando IDs numéricos de usuários e de repente percebe que precisa concatená-los com texto em logs ou respostas HTTP. Você escreve algo como str := "User_" + id — e o compilador dá erro: cannot use id (type int) as type string in concatenation. Familiar?
Esta é uma das perguntas mais populares no Stack Overflow sobre Go — «How to convert an int value to string in Go?» — foi visualizada centenas de milhares de vezes. E não é à toa: em Go a tipagem é forte, e simplesmente «somar» um número com uma string não funciona. Mas não se preocupe — hoje vamos abordar todas as formas de conversão de int para string em Go. Você vai descobrir qual método é mais rápido, qual é mais seguro e quando usar cada um. Vamos lá!
Por que o Go não permite simplesmente somar int e string?
\n\nAo contrário de JavaScript ou Python, onde "Age: " + 25 funciona «de fábrica», o Go exige conversão explícita de tipos. Isso é feito por segurança: você deve sempre controlar o que está sendo convertido em quê. Imagine que você acidentalmente soma um número com texto — em outras linguagens, isso pode gerar bugs difíceis de detectar. Em Go, o compilador diz imediatamente: «Pare, não pode».
Por isso, para converter int em string em Go, existem funções específicas da biblioteca padrão. Sem dependências externas — apenas Go puro.
Método nº1: fmt.Sprintf — o «canivete suíço» universal
\n\nA forma mais intuitiva é usar a função fmt.Sprintf. Você provavelmente já a conhece da saída formatada. Ela consegue converter qualquer coisa em string — números, valores booleanos, structs.
package main\n\nimport "fmt"\n\nfunc main() {\n age := 25\n str := fmt.Sprintf("Age: %d", age)\n fmt.Println(str) // Saída: Age: 25\n}\n\nVantagens:
\n- \n
- Muito flexível: permite incorporar o número diretamente na string com o formato desejado (decimal, hexadecimal, com zeros à esquerda). \n
- Adequado para qualquer tipo — não apenas int, mas também float, bool, struct. \n
Desvantagens:
\n- \n
- Usa reflexão internamente, portanto é mais lento que funções especializadas. \n
- Se você precisa apenas obter uma string a partir de um número (sem formatação), é excessivo. \n
Quando usar: quando você precisa não apenas converter, mas também formatar a saída — adicionar símbolos de moeda, alinhar por largura, converter para HEX.
\n\nMétodo nº2: strconv.Itoa — rápido e simples (int → string)
\n\nSe sua tarefa é apenas obter a representação em string do número, sem «enfeites», use strconv.Itoa. Esta é uma função especializada para converter int em string. Ela é rápida e não faz operações desnecessárias.
package main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n number := 42\n str := strconv.Itoa(number)\n fmt.Println(str) // Saída: "42"\n fmt.Printf("Tipo: %T\\n", str) // Tipo: string\n}\n\nVantagens:
\n- \n
- Máximo desempenho para o caso básico. \n
- Simplicidade: uma função — uma ação. \n
Desvantagens:
\n- \n
- Funciona apenas com o tipo
int. Se você temint64,int32, etc., precisa primeiro converter paraintou usar outro método. \n - Não há controle sobre a base numérica — apenas representação decimal. \n
Quando usar: quando você tem um int comum e precisa apenas obter a string — esta é sua escolha padrão.
Método nº3: strconv.FormatInt — controle sobre a base numérica
\n\nE se você precisar converter um número n