charm/bubbletea für Go: Komplettleitfaden mit Beispielen
1. Was ist Bubble Tea und warum braucht man es?
Bubble Tea ist ein leistungsstarkes, elegantes und produktives Framework zur Erstellung von Terminal-Benutzeroberflächen (TUI) in Go. Inspiriert von der Architektur der funktionalen Programmierung in Elm, bietet es ein einfaches, aber unglaublich flexibles Modell, das auf drei Kernkonzepten basiert: Model (Zustand), Update (Aktualisierungsfunktion) und View (Darstellungsfunktion).
Warum Bubble Tea verwenden? Wenn Ihnen langweilige, einzeilige CLI-Tools zuwider sind und Sie interaktive, schöne und reaktionsschnelle Anwendungen direkt im Terminal erstellen möchten, ist dies Ihr Werkzeug. Mit Bubble Tea können Sie alles bauen – von einfachen Eingabeformularen und Auswahllisten bis hin zu komplexen Dateimanagern, Musikplayern, Spielen und Dashboards. Es übernimmt die gesamte niedrigschwellige Terminalarbeit (Signalverarbeitung, Cursorsteuerung, Rendering), sodass Sie sich auf die Anwendungslogik konzentrieren können.
Die Bibliothek ist Teil der Charm-Ökosystems, das auch andere nützliche Tools umfasst, wie Bubbles (eine Sammlung vorgefertigter Komponenten wie Textfelder, Spinner, Fortschrittsbalken) und Lip Gloss (eine Bibliothek zur Stilausgabe). Zusammen bilden sie ein komplettes Set zur Erstellung professioneller TUI-Anwendungen.
2. Installation
Die Installation der Bibliothek erfolgt auf dem Standardweg für Go:
go get github.com/charmbracelet/bubbletea@latest
Für die Verwendung vorgefertigter Komponenten (Widgets) wird außerdem die Installation des Pakets bubbles empfohlen:
go get github.com/charmbracelet/bubbles@latest
Und für die Stilisierung:
go get github.com/charmbracelet/lipgloss@latest
3. Schnellstart – Minimales funktionierendes Beispiel
Erstellen Sie eine Datei main.go und fügen Sie den folgenden Code ein. Diese Anwendung zählt die Anzahl der Tastendrücke. Drücken Sie Strg+C zum Beenden.
package main
import (
"fmt"
"os"
tea "github.com/charmbracelet/bubbletea"
)
// 1. Model – speichert den Zustand der Anwendung.
type model struct {
count int
}
// 2. Init – gibt den anfänglichen Befehl zurück (normalerweise nil).
func (m model) Init() tea.Cmd {
return nil
}
// 3. Update – verarbeitet eingehende Nachrichten und gibt ein neues Modell und einen Befehl zurück.
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c":
return m, tea.Quit // Befehl zum Beenden
default:
m.count++
return m, nil
}
}
return m, nil
}
// 4. View – gibt einen String zurück, der im Terminal angezeigt wird.
func (m model) View() string {
return fmt.Sprintf("Tastendrücke: %d\n\nDrücken Sie eine beliebige Taste. Zum Beenden drücken Sie Strg+C.", m.count)
}
func main() {
p := tea.NewProgram(model{})
if _, err := p.Run(); err != nil {
fmt.Printf("Fehler: %v", err)
os.Exit(1)
}
}
Starten Sie die Anwendung:
go run main.go
4. Kernmethoden und Typen
In Bubble Tea sind die Schlüsselelemente Interfaces und Funktionen, nicht Klassen. Hier sind die 8 wichtigsten Elemente.
4.1. tea.NewProgram
Signatur: func NewProgram(