Cast para Go: guia completo com exemplos práticos

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

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

Recommendations