Automação de rotinas em Go: como escrever scripts que funcionam e não quebram

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

Por que Go é a linguagem ideal para automação?

\n\n

Você já escreveu um script em Python que funcionava perfeitamente no seu notebook, mas "quebrava" no servidor por falta da versão correta do interpretador? Ou talvez seu script Bash tenha se transformado em um monstro insustentável quando a lógica ficou um pouco mais complexa do que "copiar arquivo"?

\n\n

Se sim, vale a pena dar uma olhada no Go. Esta linguagem foi criada nos laboratórios da Google justamente para resolver os problemas que os engenheiros enfrentam ao escrever utilitários e serviços. Ela compila para um único binário (sem dependências!), roda em velocidade espacial e tem uma sintaxe simples, porém poderosa.

\n\n

Neste artigo, não vamos ensinar os fundamentos da sintaxe. Vamos direto ao ponto: automação de tarefas em Go com exemplos reais de código. Você aprenderá como escrever seus primeiros "scripts Go" que funcionarão de forma mais confiável e rápida do que seus equivalentes em Python. Vamos nessa!

\n\n

1. Trabalhando com o sistema de arquivos: limpando logs como um profissional

\n\n

Uma das tarefas mais comuns para um administrador ou desenvolvedor é limpar logs antigos. Vamos escrever um utilitário que remove arquivos com mais de N dias em um diretório específico. Este é um exemplo clássico de automação em Go.

\n\n
package main\n\nimport (\n    "fmt"\n    "os"\n    "path/filepath"\n    "time"\n)\n\nfunc main() {\n    // Caminho para o diretório de logs\n    logDir := "/var/log/myapp"\n    // Remove arquivos com mais de 7 dias\n    maxAge := 7 * 24 * time.Hour\n\n    err := filepath.Walk(logDir, func(path string, info os.FileInfo, err error) error {\n        if err != nil {\n            return err\n        }\n\n        // Pula diretórios\n        if info.IsDir() {\n            return nil\n        }\n\n        // Verifica a idade do arquivo\n        if time.Since(info.ModTime()) > maxAge {\n            fmt.Printf("Removendo arquivo antigo: %s (idade: %v)\\n", path, time.Since(info.ModTime()))\n            err := os.Remove(path)\n            if err != nil {\n                fmt.Printf("Erro ao remover %s: %v\\n", path, err)\n            }\n        }\n        return nil\n    })\n\n    if err != nil {\n        fmt.Printf("Erro ao percorrer diretório: %v\\n", err)\n    }\n}\n
\n\n

Este código é um ótimo exemplo de como automatizar tarefas em Go sem bibliotecas extras. O pacote embutido filepath percorre pastas recursivamente, e os.Remove libera espaço. Compilando-o uma vez, você obtém um binário que pode ser executado via cron em qualquer servidor.

\n\n

2. Requisições HTTP e parsing de API

\n\n

Suponha que você precise monitorar o status de vários microsserviços ou fazer parsing de dados de uma API externa. Go, com suas goroutines, lida com isso de forma brilhante. Vamos escrever um script que verifica a disponibilidade de sites e envia uma notificação se algo cair. Este é mais um exemplo poderoso de automação em Golang.

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n    "sync"\n    "time"\n)\n\nfunc checkURL(url string, wg *sync.WaitGroup) {\n    defer wg.Done()\n\n    client := http.Client{\n        Timeout: 5 * time.Second,\n    }\n\n    resp, err := client.Get(url)\n    if err != nil {\n        fmt.Printf("[FALHA] %s - %v\\n", url, err)\n        return\n    }\n    defer resp.Body.Close()\n\n    if resp.StatusCode != http.StatusOK {\n        fmt.Printf("[AVISO] %s - status: %d\\n", url, resp.StatusCode)\n    } else {\n        fmt.Printf("[OK]   %s - funcionando\\n", url)\n    }\n}\n\nfunc main() {\n    urls := []string{\n        "https://google.com",\n        "https://github.com",\n        "https://pythonlib.ru",\n        "https://non-existent-site.xyz",\n    }\n\n    var wg sync.WaitGroup\n\n    for _, url := range urls {\n        wg.Add(1)\n        go checkURL(url, &wg) // Executa em goroutine\n    }\n\n    wg.Wait() // Aguarda a conclusão de todas as goroutines\n    fmt.Println("Verificação concluída.")\n}\n
\n\n

Observe o s

Blogs

Book Recommendations