Chat-bots em Go: Escrevendo um assistente rápido e confiável do zero

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 escolha ideal para chat-bots?

\n\n

Se você já escreveu um chat-bot em Python, sabe: ele funciona. Mas quando a carga cresce para milhares de requisições por segundo, Python começa a "pensar". Go (ou Golang) foi criado para não pensar — ele simplesmente faz. Alta performance, suporte nativo a redes, goroutines (threads leves) e consumo mínimo de memória fazem de Go a melhor linguagem para criar chat-bots de alta carga.

\n\n

Neste guia, criaremos um bot do Telegram completo em Go, que processará comandos, trabalhará com API e escalará facilmente. Você receberá não apenas teoria, mas código pronto que pode ser executado em 5 minutos.

\n\n

O que vamos construir?

\n\n

Nosso bot em Go será capaz de:

\n
    \n
  • Responder ao comando /start com uma saudação.
  • \n
  • Receber mensagens de texto e retorná-las em maiúsculas (eco-bot com "personalidade").
  • \n
  • Tratar erros e registrar ações em log.
  • \n
  • Funcionar através da API do Telegram Bot (o cenário mais popular para chat-bots).
  • \n
\n\n

Todo o código será escrito em Go puro, sem bibliotecas de terceiros (apenas a biblioteca padrão e o cliente HTTP), para que você entenda como tudo funciona "por baixo dos panos".

\n\n

Passo 1: Preparação do ambiente

\n\n

Certifique-se de ter o Go instalado (versão 1.21+). Você pode verificar com o comando:

\n\n
go version
\n\n

Crie um novo diretório para o projeto e inicialize o módulo:

\n\n
mkdir go-chat-bot\ncd go-chat-bot\ngo mod init github.com/seunome/go-chat-bot
\n\n

Você precisará de um token de bot. Se não tiver um:

\n
    \n
  1. Escreva para @BotFather no Telegram.
  2. \n
  3. Envie o comando /newbot e siga as instruções.
  4. \n
  5. Copie o token recebido (parece com: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  6. \n
\n\n

Salve o token em uma variável de ambiente (nunca armazene tokens no código!):

\n\n
export BOT_TOKEN="seu_token_aqui"
\n\n

Passo 2: Estrutura básica do bot em Go

\n\n

Crie o arquivo main.go. Começaremos com um servidor HTTP simples que receberá atualizações do Telegram. Go é ideal para isso graças ao pacote nativo net/http.

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n    "io"\n    "log"\n    "net/http"\n    "os"\n    "strings"\n)\n\n// Update — estrutura da atualização recebida do Telegram\ntype Update struct {\n    UpdateID int `json:"update_id"`\n    Message  struct {\n        Text string `json:"text"`\n        Chat struct {\n            ID int64 `json:"id"`\n        } `json:"chat"`\n    } `json:"message"`\n}\n\nfunc main() {\n    botToken := os.Getenv("BOT_TOKEN")\n    if botToken == "" {\n        log.Fatal("BOT_TOKEN não definido")\n    }\n\n    http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {\n        handleWebhook(w, r, botToken)\n    })\n\n    log.Println("Bot iniciado na porta :8080")\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}\n\nfunc handleWebhook(w http.ResponseWriter, r *http.Request, token string) {\n    body, err := io.ReadAll(r.Body)\n    if err != nil {\n        log.Printf("Erro ao ler corpo da requisição: %v", err)\n        http.Error(w, "Bad Request", http.StatusBadRequest)\n        return\n    }\n    defer r.Body.Close()\n\n    var update Update\n    if err := json.Unmarshal(body, &update); err != nil {\n        log.Printf("Erro ao fazer parsing do JSON: %v", err)\n        http.Error(w, "Bad JSON", http.StatusBadRequest)\n        return\n    }\n\n    // Se a mensagem estiver vazia — ignoramos\n    if update.Message.Text == "" {\n        return\n    }\n\n    log.Printf("Mensagem recebida: %s", update.Message.Text)\n\n    // Montamos a resposta\n    var replyText string\n    if strings.HasPrefix(update.Message.Text, "/start") {\n        replyText = "Olá! Sou um bot em Go. Escreva"                

Blogs

Book Recommendations