Go: Como esquecer o "Na minha máquina funciona" e começar a conquistar mundos
\n\nVocê já escreveu um script legal em Python, enviou para um amigo no Windows, e ele respondeu: "Não está rodando aqui, algum Python não está instalado"? Familiar? Bem-vindo ao inferno das dependências, ambientes virtuais e versões de interpretadores. Agora imagine: você escreveu o código uma vez, apertou um botão — e obteve um binário que funciona no Windows, Linux e macOS sem precisar instalar nada. Sem Python, sem Node, sem JVM.
\n\nIsso não é ficção. Isso é desenvolvimento multiplataforma em Go — uma linguagem que foi criada para resolver exatamente esses problemas. Se você programa em Python e está cansado de dançar em volta das dependências, ou se você está apenas procurando uma ferramenta para criar utilitários rápidos e portáteis — o Go se tornará seu novo melhor amigo. Neste artigo, não vamos encher lingüiça. Vamos analisar exemplos reais, mostrar código e contar como fazer seu programa funcionar em qualquer lugar onde haja um processador.
\n\nPor que o Go é a escolha ideal para multiplataforma?
\n\nNo mundo do Golang multiplataforma, isso não é um recurso, mas sim a base. Ao contrário do Python, que requer um interpretador, ou do Java, que precisa de uma máquina virtual, o Go compila para código de máquina nativo. Isso significa que seu binário contém tudo o que é necessário para funcionar: runtime, coletor de lixo e seu código. Sem bibliotecas externas, sem "pip install". Baixou e executou.
\n\nMas o principal é a cross-compilação Go. Você está no MacBook, escreve o código e, com um único comando, compila um arquivo executável para Windows, Linux, Raspberry Pi (ARM) ou até mesmo para um antigo FreeBSD. Você não precisa de uma máquina virtual ou Docker para compilar. Uma variável de ambiente — e pronto.
\n\nPara um desenvolvedor Python, isso soa como mágica, mas é apenas Go. Vamos para a prática.
\n\nEscrevendo um utilitário multiplataforma em Go
\n\nVamos imaginar que precisamos escrever um programa simples, mas útil: ele coletará informações do sistema (SO, arquitetura, nome do host) e as salvará em um arquivo JSON. Esta é uma tarefa clássica para DevOps ou administradores de sistemas. Em Python, você usaria platform e json, mas em Go isso parece ainda mais elegante.
Passo 1: Estrutura e importação
\n\nCrie o arquivo main.go. A primeira coisa que faremos é definir a estrutura de dados e usar os pacotes runtime e os para obter informações do sistema. Observe: runtime.GOOS e runtime.GOARCH são constantes embutidas que o Go conhece já na fase de compilação.
package main\n\nimport (\n "encoding/json"\n "fmt"\n "os"\n "runtime"\n)\n\ntype SystemInfo struct {\n OS string `json:"os"`\n Arch string `json:"arch"`\n Hostname string `json:"hostname"`\n GoVersion string `json:"go_version"`\n}\n\nPasso 2: Coleta de informações
\n\nAgora vamos escrever a função que coleta os dados. Usaremos os.Hostname() — ela é multiplataforma e funciona em todos os sistemas.
func getSystemInfo() (SystemInfo, error) {\n hostname, err := os.Hostname()\n if err != nil {\n return SystemInfo{}, fmt.Errorf("erro ao obter hostname: %w", err)\n }\n\n return SystemInfo{\n OS: runtime.GOOS,\n Arch: runtime.GOARCH,\n Hostname: hostname,\n GoVersion: runtime.Version(),\n }, nil\n}\n\nPasso 3: Gravação em JSON
\n\nVamos finalizar nosso programa: obter as informações, codificar em JSON e gravar em um arquivo. Também adicionaremos tratamento de erros — isso é uma boa prática no desenvolvimento multiplataforma em Go, pois os caminhos dos arquivos diferem em diferentes SOs.
\n\nfunc main() {\n info, err := getSystemInfo()\n if err != nil {\n fmt.Printf("Erro: %v\\n", err)\n os.Exit(1)\n }\n\n