Formatação de strings em Go sem imprimir: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que formatar uma string se não precisa imprimir?



Você já se deparou com uma situação em que precisa montar uma string bonita a partir de várias partes, inserir variáveis, adicionar espaçamentos, mas sem exibir o resultado na tela? Parece que todos os exemplos nos tutoriais de Go terminam com a chamada fmt.Println, e o que fazer se a string for necessária para enviar pela rede, gravar em um arquivo ou passar para outra função?



Essa pergunta atormenta milhares de desenvolvedores, e não é à toa — no Stack Overflow ela acumulou dezenas de milhares de visualizações. Neste artigo, vamos abordar como formatar strings em Go sem imprimir, usando exemplos reais de código. Você conhecerá a poderosa ferramenta fmt.Sprintf, as abordagens modernas com strings.Builder e o bytes.Buffer de baixo nível. Vamos lá!



Problema: Printf imprime, mas eu preciso salvar



Em Go, existe a excelente função fmt.Printf, que formata uma string e a exibe imediatamente no fluxo de saída padrão. Mas e se você quiser obter a string formatada como um valor, e não como um efeito colateral? Por exemplo:



name := "Alice"age := 30// Quero obter a string "Meu nome é Alice, tenho 30 anos"// mas não imprimi-la imediatamente


Desenvolvedores iniciantes costumam escrever assim:



fmt.Printf("Meu nome é %s, tenho %d anos", name, age)// A string foi impressa, mas nós a perdemos!


Isso funciona, mas o resultado vai para o console. E nós precisamos salvá-lo em uma variável para processamento posterior. A solução existe, e é elegante.



Solução nº 1: fmt.Sprintf — o rei da formatação



No pacote fmt, existe uma função gêmea do Printf chamada Sprintf. A letra "S" no início significa "String" — ela retorna uma string, em vez de imprimi-la. Esta é a maneira mais direta e compreensível de formatar strings em Go sem imprimir.



Exemplo básico com Sprintf



package main

import ( "fmt")

func main() { name := "Bob" age := 25 score := 98.5

// Formatando sem imprimir message := fmt.Sprintf("Olá, %s! Você tem %d anos. Seu resultado: %.1f pontos.", name, age, score)

// Agora message contém a string formatada fmt.Println(message) // Imprimindo apenas agora}


Saída:

Olá, Bob! Você tem 25 anos. Seu resultado: 98.5 pontos.


Observe: Sprintf usa os mesmos placeholders ( %s, %d, %f ) que o Printf. A diferença é apenas que o resultado é retornado, e não exibido.



Placeholders avançados



Você pode usar todos os recursos de formatação do Go:



package main

import "fmt"

func main() { // Alinhamento por largura leftAligned := fmt.Sprintf("%-10s %d", "Produto", 10) rightAligned := fmt.Sprintf("%10s %d", "Produto", 10)

// Formatação de números price := 1234.5678 formattedPrice := fmt.Sprintf("Preço: $%.2f (com IVA: $%.2f)", price, price*1.2)

// Saída hexadecimal hexValue := fmt.Sprintf("Hex: %x, Dec: %d", 255, 255)

fmt.Println(leftAligned) fmt.Println(rightAligned) fmt.Println(formattedPrice) fmt.Println(hexValue)}


Saída:

Produto   10   Produto 10Preço: $1234.57 (com IVA: $1481.48)Hex: ff, Dec: 255


fmt.Sprintf é sua ferramenta universal para formatação de strings em Go. Funciona rápido, é compreensível e cobre 90% das tarefas.



Solução nº 2: strings.Builder — para construções complexas



E se você precisar montar uma string a partir de várias partes, adicionando-as uma por uma? Por exemplo, gerar HTML, JSON ou consultas SQL. Usar Sprintf para cada parte não é eficiente — você estará co

Blogs

Book Recommendations