Pourquoi Go est-il le choix idéal pour les chatbots ?
\n\nSi vous avez déjà écrit un chatbot en Python, vous savez : il fonctionne. Mais lorsque la charge atteint des milliers de requêtes par seconde, Python commence à « réfléchir ». Go (ou Golang) est conçu pour ne pas réfléchir — il agit simplement. Des performances élevées, une gestion réseau intégrée, des goroutines (threads légers) et une consommation mémoire minimale font de Go le meilleur langage pour créer des chatbots à forte charge.
\n\nDans ce guide, nous allons créer un bot Telegram complet en Go qui traitera les commandes, fonctionnera avec l'API et sera facilement évolutif. Vous obtiendrez non seulement de la théorie, mais un code prêt à être exécuté en 5 minutes.
\n\nQu'allons-nous construire ?
\n\nNotre bot en Go sera capable de :
\n- \n
- Répondre à la commande
/startpar un message de bienvenue. \n - Recevoir des messages texte et les retourner en majuscules (écho-bot avec du « caractère »). \n
- Gérer les erreurs et journaliser les actions. \n
- Fonctionner via l'API Telegram Bot (le scénario le plus populaire pour les chatbots). \n
Tout le code sera écrit en Go pur sans bibliothèques tierces (seulement la bibliothèque standard et le client HTTP), afin que vous compreniez comment tout fonctionne « sous le capot ».
\n\nÉtape 1 : Préparation de l'environnement
\n\nAssurez-vous d'avoir Go installé (version 1.21+). Vérifiez avec la commande :
\n\ngo version\n\nCréez un nouveau répertoire pour le projet et initialisez le module :
\n\nmkdir go-chat-bot\ncd go-chat-bot\ngo mod init github.com/votrenom/go-chat-bot\n\nVous aurez besoin d'un token de bot. Si vous n'en avez pas :
\n- \n
- Écrivez à @BotFather sur Telegram. \n
- Envoyez la commande
/newbotet suivez les instructions. \n - Copiez le token obtenu (il ressemble à :
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). \n
Enregistrez le token dans une variable d'environnement (ne stockez jamais les tokens dans le code !) :
\n\nexport BOT_TOKEN="votre_token_ici"\n\nÉtape 2 : Structure de base du bot en Go
\n\nCréez le fichier main.go. Nous commencerons par un serveur HTTP simple qui recevra les mises à jour de Telegram. Go est parfait pour cela grâce au package intégré net/http.
package main\n\nimport (\n "encoding/json"\n "fmt"\n "io"\n "log"\n "net/http"\n "os"\n "strings"\n)\n\n// Update — structure d'une mise à jour entrante de 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 non défini")\n }\n\n http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {\n handleWebhook(w, r, botToken)\n })\n\n log.Println("Bot démarré sur :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("Erreur de lecture du corps de la requête : %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("Erreur d'analyse JSON : %v", err)\n http.Error(w, "Bad JSON", http.StatusBadRequest)\n return\n }\n\n // Si le message est vide — on ignore\n if update.Message.Text == "" {\n return\n }\n\n log.Printf("Message reçu : %s", update.Message.Text)\n\n // On forme la réponse\n var replyText string\n if strings.HasPrefix(update.Message.Text, "/start") {\n replyText = "Bonjour ! Je suis un bot en Go. Écri"