CLI-Frameworks für Go: Cobra, Urfave/cli und Bubble Tea

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

CLI-Frameworks für Go: Von einfachen Dienstprogrammen bis zu TUI-Oberflächen



Go (Golang) ist zur Sprache Nr. 1 für die Erstellung von Konsolendienstprogrammen und DevOps-Tools geworden. Dank schneller Kompilierung, integrierter Unterstützung für Nebenläufigkeit und einfacher Verteilung (eine einzige Binärdatei) ist Go ideal für CLI. Das Schreiben eines Argumentparsers, der Fehlerbehandlung und der farbigen Ausgabe von Grund auf ist jedoch eine mühsame Aufgabe. Hier helfen CLI-Frameworks. In diesem Artikel betrachten wir drei wichtige Werkzeuge: Cobra, urfave/cli und Bubble Tea.



1. Cobra – der Industriestandard



Cobra (github.com/spf13/cobra) ist das beliebteste Framework für Go. Es wird von Kubernetes, Hugo, Docker, GitHub CLI verwendet. Cobra bietet einen leistungsstarken Befehlsgenerator, verschachtelte Unterbefehle, Autovervollständigung für bash/zsh/fish und Integration mit Viper (Konfigurationsverwaltung).



Installation

go get -u github.com/spf13/cobra/cobra


Beispiel: Einfache Anwendung mit Unterbefehlen

package main

import ( "fmt" "github.com/spf13/cobra")

func main() { var rootCmd = &cobra.Command{ Use: "app", Short: "Beispielanwendung mit Cobra", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Stamm-Handler gestartet") }, }

var helloCmd = &cobra.Command{ Use: "hello [name]", Short: "Benutzer begrüßen", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Hallo, %s!", args[0]) }, }

rootCmd.AddCommand(helloCmd) rootCmd.Execute()}


Wichtige Funktionen:

  • Automatische Hilfegenerierung (--help)
  • Unterstützung für Flags (persistent, lokal)
  • Argumentvalidierung
  • Generierung von Autovervollständigungsskripten
  • Integration mit Viper für die Konfiguration


2. Urfave/cli – Einfachheit und Flexibilität



Urfave/cli (github.com/urfave/cli/v2) ist eine leichte Alternative zu Cobra. Das Framework ist deklarativ: Sie beschreiben Befehle, Flags und Aktionen in Strukturen. Ideal für kleine und mittlere Dienstprogramme.



Installation

go get github.com/urfave/cli/v2


Beispiel: Dienstprogramm für die Dateiarbeit

package main

import ( "fmt" "log" "os" "github.com/urfave/cli/v2")

func main() { app := &cli.App{ Name: "fileutil", Usage: "Dienstprogramm für die Dateiarbeit", Commands: []*cli.Command{ { Name: "read", Aliases: []string{"r"}, Usage: "Datei lesen", Action: func(cCtx *cli.Context) error { if cCtx.NArg() == 0 { return fmt.Errorf("Dateiname angeben") } data, _ := os.ReadFile(cCtx.Args().First()) fmt.Println(string(data)) return nil }, }, { Name: "write", Aliases: []string{"w"}, Usage: "Zeichenfolge in Datei schreiben", Flags: []cli.Flag{ &cli.StringFlag{ Name: "content", Aliases: []string{"c"}, Usage: "Inhalt zum Schreiben", }, }, Action: func(cCtx *cli.Context) error { content := cCtx.String("content") if content == "" { return fmt.Errorf("--content angeben") } return os.WriteFile(cCtx.Args().First(), []byte(content), 0644) }, }, }, }

if err := app.R

Empfehlungen