Warum Go die ideale Wahl für Chat-Bots ist?
\n\nWenn Sie jemals einen Chat-Bot in Python geschrieben haben, wissen Sie: Er funktioniert. Aber wenn die Last auf Tausende von Anfragen pro Sekunde ansteigt, beginnt Python zu „denken“. Go (oder Golang) wurde entwickelt, um nicht zu denken – es macht einfach. Hohe Leistung, integrierte Netzwerkfähigkeiten, Goroutinen (leichtgewichtige Threads) und minimaler Speicherverbrauch machen Go zur besten Sprache für die Erstellung hochbelasteter Chat-Bots.
\n\nIn diesem Leitfaden werden wir einen vollwertigen Telegram-Bot in Go erstellen, der Befehle verarbeitet, mit der API arbeitet und sich leicht skalieren lässt. Sie erhalten nicht nur Theorie, sondern fertigen Code, den Sie in 5 Minuten ausführen können.
\n\nWas werden wir bauen?
\n\nUnser Bot in Go wird in der Lage sein:
\n- \n
- Auf den Befehl
/startmit einer Begrüßung zu antworten. \n - Textnachrichten zu empfangen und in Großbuchstaben zurückzugeben (Echo-Bot mit „Charakter“). \n
- Fehler zu behandeln und Aktionen zu protokollieren. \n
- Über die Telegram Bot API zu arbeiten (das häufigste Szenario für Chat-Bots). \n
Der gesamte Code wird in reinem Go ohne externe Bibliotheken geschrieben (nur die Standardbibliothek und der HTTP-Client), damit Sie verstehen, wie alles „unter der Haube“ funktioniert.
\n\nSchritt 1: Vorbereitung der Umgebung
\n\nStellen Sie sicher, dass Go installiert ist (Version 1.21+). Überprüfen können Sie dies mit dem Befehl:
\n\ngo version\n\nErstellen Sie ein neues Verzeichnis für das Projekt und initialisieren Sie das Modul:
\n\nmkdir go-chat-bot\ncd go-chat-bot\ngo mod init github.com/yourname/go-chat-bot\n\nSie benötigen einen Bot-Token. Falls Sie noch keinen haben:
\n- \n
- Schreiben Sie in Telegram an @BotFather. \n
- Senden Sie den Befehl
/newbotund folgen Sie den Anweisungen. \n - Kopieren Sie den erhaltenen Token (er sieht so aus:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). \n
Speichern Sie den Token in einer Umgebungsvariable (speichern Sie Tokens niemals im Code!):
\n\nexport BOT_TOKEN="Ihr_Token_hier"\n\nSchritt 2: Grundlegende Bot-Struktur in Go
\n\nErstellen Sie die Datei main.go. Wir beginnen mit einem einfachen HTTP-Server, der Updates von Telegram empfängt. Go ist dafür dank des integrierten Pakets net/http ideal geeignet.
package main\n\nimport (\n "encoding/json"\n "fmt"\n "io"\n "log"\n "net/http"\n "os"\n "strings"\n)\n\n// Update — Struktur eines eingehenden Updates von 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 nicht gesetzt")\n }\n\n http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {\n handleWebhook(w, r, botToken)\n })\n\n log.Println("Bot gestartet auf :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("Fehler beim Lesen des Anforderungskörpers: %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("Fehler beim Parsen von JSON: %v", err)\n http.Error(w, "Bad JSON", http.StatusBadRequest)\n return\n }\n\n // Wenn die Nachricht leer ist, ignorieren wir sie\n if update.Message.Text == "" {\n return\n }\n\n log.Printf("Nachricht empfangen: %s", update.Message.Text)\n\n // Antwort erstellen\n var replyText string\n if strings.HasPrefix(update.Message.Text, "/start") {\n replyText = "Hallo! Ich bin ein Bot in Go. Schreib"