Biblioteca cast para Go: Guia Completo de Conversão de Tipos
Em Go, a tipagem estática forte é ao mesmo tempo uma vantagem e um desafio. Por um lado, o compilador detecta muitos erros durante a compilação; por outro, o desenvolvedor precisa escrever código verboso para conversão de tipos, especialmente ao trabalhar com dados de fontes externas (JSON, YAML, bancos de dados, requisições HTTP). A biblioteca cast do Spf13 (autor do Cobra e Viper) resolve esse problema de forma elegante e concisa.
cast fornece um conjunto de funções para conversão segura e conveniente de interfaces (interface{}) para tipos específicos do Go. Em vez de escrever construções complexas com type assertion e verificações de erro, você chama uma única função que retorna um valor padrão ou um erro, caso a conversão seja impossível. Isso é especialmente útil ao trabalhar com configurações, análise de respostas de API e qualquer cenário onde o tipo de dado só é conhecido em tempo de execução.
A biblioteca não usa reflexão em todas as chamadas (embora algumas funções dependam dela para conversões complexas) e foi projetada para ser o mais performática possível nos casos típicos. Ela faz parte do ecossistema Viper, mas pode ser usada como uma utilidade independente. Se você programa em Go e precisa converter strings em números, interfaces em slices ou maps em structs, o cast será seu aliado indispensável.
Instalação
A instalação da biblioteca é feita com a ferramenta padrão go get. Execute o seguinte comando no terminal dentro do seu módulo Go:
go get github.com/spf13/cast
Após a execução do comando, a biblioteca será adicionada ao arquivo go.mod e estará pronta para uso. Certifique-se de ter o Go versão 1.16 ou superior instalado (recomenda-se 1.18+ para suporte a generics, embora o cast não os utilize).
Início Rápido
Vamos ver um exemplo mínimo funcional que demonstra as principais capacidades da biblioteca: converter uma string em um número inteiro e uma interface em uma string.
package main
import (
"fmt"
"github.com/spf13/cast"
)
func main() {
// Convertendo string para int
num, err := cast.ToIntE("42")
if err != nil {
fmt.Println("Erro:", err)
return
}
fmt.Printf("Número: %d (tipo: %T)\n", num, num)
// Convertendo interface{} para string
var val interface{} = "olá mundo"
str := cast.ToString(val)
fmt.Printf("String: %s (tipo: %T)\n", str, str)
// Convertendo com fallback (sem erro)
safeNum := cast.ToInt("não é número") // retorna 0
fmt.Printf("Número seguro: %d\n", safeNum)
}
Como você pode ver, o código é limpo e fácil de entender. Funções com o sufixo E retornam um erro; sem o sufixo, retornam o valor zero em caso de falha.
Principais Métodos e Funções
A biblioteca cast oferece uma ampla gama de funções para trabalhar com diferentes tipos de dados. Abaixo estão 8+ funções essenciais com descrição e exemplos.
1. ToString
Assinatura: func ToString(i interface{}) string
O que faz: Converte o valor fornecido em uma string. Suporta tipos numéricos, booleanos, slices de bytes, strings e interfaces.
package main
import (
"fmt"
"github.com/spf13/cast"
)
func main() {
fmt.Println(cast.ToString(123)) // "123"
fmt.Println(cast.ToString(45.67)) // "45.67"
fmt.Println(cast.ToString(true)) // "true"
fmt.Println(cast.ToString([]byte("go"))) // "go"
fmt.Println(cast.ToString(nil)) // ""
}
2. ToInt
Assinatura: func ToInt(i interface{}) int
O que faz: Converte o valor para int. Funciona com strings
Também na biblioteca
Ardalis.SmartEnum para C# (.NET): guia completo com exemplos
Cliente Elasticsearch para C# (.NET): NEST e Elastic.Clients.Elasticsearch
Contêiner de Injeção de Dependência para Kotlin: Koin vs Kodein vs Dagger
Trabalho com YAML em TypeScript: parsing, geração e validação de dados
Frameworks CLI para PHP: Symfony Console e Laravel Zero — guia completo