CLI-Frameworks für Go (Golang): Professionelle Konsolenanwendungen erstellen
Go (Golang) gilt zu Recht als eine der besten Sprachen für die Erstellung von Konsolen-Dienstprogrammen. Dank schneller Kompilierung, integrierter Unterstützung für Multithreading und einem praktischen Paketsystem wurden legendäre Tools wie Docker, Kubernetes, Hugo und Terraform in Go geschrieben. Für die Erstellung einer wirklich benutzerfreundlichen und flexiblen CLI (Command Line Interface) wird jedoch oft nicht nur die Standardbibliothek flag benötigt, sondern auch spezialisierte Frameworks. In diesem Artikel werden wir die besten CLI-Frameworks für Go, ihre Funktionen, Vorteile und Anwendungsbeispiele im Detail besprechen.
Warum ein CLI-Framework?
Die Standardbibliothek flag bewältigt einfache Aufgaben hervorragend, aber wenn Ihr Projekt wächst, entstehen Anforderungen an:
- Unterstützung für verschachtelte Befehle (Subcommands), wie bei
git commitoderdocker run. - Automatische Generierung von Hilfe- und Man-Seiten.
- Autovervollständigung (bash/zsh/fish completion).
- Parsing komplexer Flags und Argumente.
- Interaktiven Betriebsmodus (TUI).
Genau für diese Aufgaben gibt es CLI-Frameworks.
1. Cobra — der König der CLIs in Go
Cobra ist das beliebteste Framework zur Erstellung von CLIs in Go. Es wird in Kubernetes, Hugo, GitHub CLI und vielen anderen Projekten verwendet. Cobra bietet eine leistungsstarke Schnittstelle zum Erstellen von Befehlen, Flags und Argumenten.
Wichtige Funktionen:
- Einfache Erstellung verschachtelter Befehle.
- Automatische Generierung von Hilfe- und Man-Seiten.
- Unterstützung für Autovervollständigung für bash, zsh, fish und PowerShell.
- Integration mit Viper (Konfigurationsmanager).
- Generierung eines Projektgerüsts über
cobra-cli init.
Codebeispiel mit Cobra:
package main
import ( "fmt" "os"
"github.com/spf13/cobra")
func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Begrüßungsdienstprogramm", Long: "Ein einfaches Dienstprogramm zur Begrüßung des Benutzers", Run: func(cmd *cobra.Command, args []string) { name, _ := cmd.Flags().GetString("name") if name == "" { name = "Welt" } fmt.Printf("Hallo, %s!", name) }, }
rootCmd.Flags().StringP("name", "n", "", "Benutzername")
if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) }}Wenn Sie dieses Programm mit dem Flag --name "Max" ausführen, erhalten Sie eine Begrüßung. Cobra fügt automatisch das Flag --help und eine schöne Formatierung der Ausgabe hinzu.
2. urfave/cli (ehemals codegangsta/cli)
urfave/cli ist das zweitbeliebteste Framework. Es zeichnet sich durch eine einfache und intuitive API aus, die auf die deklarative Beschreibung von Befehlen ausgerichtet ist. Es eignet sich hervorragend für kleine und mittlere Projekte.
Vorteile:
- Minimalistischer und verständlicher Code.
- Integrierte Unterstützung für Flags, Argumente und Unterbefehle.
- Automatische Generierung von Hilfe.
- Unterstützung für Aktionen vor und nach der Befehlsausführung (Before/After Hooks).
Codebeispiel mit urfave/cli:
package main
import ( "fmt" "log" "os"
"github.com/urfave/cli/v2")
func main() { app := &cli.App{ Name: "calculator", Usage: "Einfacher Taschenrechner", Commands: []*cli.Command{ { Name: "add", Aliases: []string{"a"}, Usage: "Addition zweier Zahlen", Auch in der Bibliothek
Behat PHP: Komplettleitfaden mit Beispielen & Tipps
Arbeiten mit ZIP/Archiven in Swift (iOS/macOS): vollständige Anleitung
Scrutor für C# (.NET): Vollständige Anleitung mit Beispielen
Geolokalisierung und Karten in Kotlin: Vollständiger Leitfaden zur Integration
Internationalisierung (i18n) in Kotlin: Vollständiger Leitfaden mit Beispielen