Chat-Bots in Go: Schreiben Sie einen schnellen und zuverlässigen Assistenten von Grund auf

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Go die ideale Wahl für Chat-Bots ist?

\n\n

Wenn 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\n

In 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\n

Was werden wir bauen?

\n\n

Unser Bot in Go wird in der Lage sein:

\n
    \n
  • Auf den Befehl /start mit 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
\n\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\n

Schritt 1: Vorbereitung der Umgebung

\n\n

Stellen Sie sicher, dass Go installiert ist (Version 1.21+). Überprüfen können Sie dies mit dem Befehl:

\n\n
go version
\n\n

Erstellen Sie ein neues Verzeichnis für das Projekt und initialisieren Sie das Modul:

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

Sie benötigen einen Bot-Token. Falls Sie noch keinen haben:

\n
    \n
  1. Schreiben Sie in Telegram an @BotFather.
  2. \n
  3. Senden Sie den Befehl /newbot und folgen Sie den Anweisungen.
  4. \n
  5. Kopieren Sie den erhaltenen Token (er sieht so aus: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  6. \n
\n\n

Speichern Sie den Token in einer Umgebungsvariable (speichern Sie Tokens niemals im Code!):

\n\n
export BOT_TOKEN="Ihr_Token_hier"
\n\n

Schritt 2: Grundlegende Bot-Struktur in Go

\n\n

Erstellen 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.

\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 — 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"                

Blogs

Buchempfehlungen