CLI-Frameworks für Go (Golang): ausführliche Anleitung
Go (Golang) ist eine Sprache, die sich ideal für die Erstellung von Kommandozeilen-Tools (CLI) eignet. Dank schneller Kompilierung, integrierter Unterstützung für Nebenläufigkeit und einfacher Verteilung als einzelne Binärdatei ist Go zum De-facto-Standard für die Entwicklung von CLI-Anwendungen geworden. Für die Erstellung komplexer, benutzerfreundlicher und skalierbarer Kommandozeilenschnittstellen reicht die Standardbibliothek flag jedoch oft nicht aus. Hier kommen spezialisierte Frameworks ins Spiel. In diesem Artikel betrachten wir die drei beliebtesten CLI-Frameworks für Go im Detail: Cobra, urfave/cli und Kong, vergleichen ihre Funktionen und zeigen Anwendungsbeispiele.
Warum sollte man ein CLI-Framework verwenden?
Die Entwicklung einer CLI-Anwendung von Grund auf kann schnell chaotisch werden, insbesondere wenn es um Folgendes geht:
- Unterstützung von verschachtelten Befehlen (Subcommands) und Flags.
- Automatische Generierung von Hilfetexten (
--help). - Fehlerbehandlung und Argumentvalidierung.
- Autovervollständigung (bash/zsh completion).
Frameworks lösen diese Probleme, indem sie eine fertige Architektur und einen Satz von Werkzeugen bereitstellen.
1. Cobra — der König der CLI in Go
Cobra ist das beliebteste Framework zur Erstellung von CLI-Anwendungen in Go. Es wird in Giganten wie Kubernetes, Hugo, Docker und GitHub CLI verwendet. Cobra basiert auf dem Konzept von Befehlen, Argumenten und Flags.
Hauptfunktionen von Cobra:
- Befehle und Unterbefehle: Jede Aktion ist ein Befehl (
app serve,app init). - Flags: Globale (
--verbose) und lokale für den Befehl. - Automatische Hilfe: Wird aus den Befehlsbeschreibungen generiert.
- Autovervollständigung: Integrierte Unterstützung für bash, zsh, fish und PowerShell.
- Code-Generator: Das Dienstprogramm
cobra-clierstellt ein Projektskelett.
Codebeispiel mit Cobra:
package main
import ( "fmt" "github.com/spf13/cobra")
func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Greet is a simple CLI tool", Long: "A simple CLI tool to greet people.", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Hello! Use 'greet hello --name' to greet someone.") }, }
var name string var helloCmd = &cobra.Command{ Use: "hello", Short: "Greet a person", Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Hello, %s!", name) }, }
helloCmd.Flags().StringVarP(&name, "name", "n", "World", "Name to greet") rootCmd.AddCommand(helloCmd) rootCmd.Execute()}Ausführung: go run main.go hello --name=PythonLib gibt Hello, PythonLib! aus.
2. urfave/cli — Einfachheit und Minimalismus
Früher bekannt als codegangsta/cli, zeichnet sich dieses Framework durch seine Einfachheit und elegante API aus. Es eignet sich hervorragend für kleine und mittlere Projekte, die nicht die volle Leistungsfähigkeit von Cobra benötigen.
Wesentliche Merkmale von urfave/cli:
- Deklarativer Stil: Die Anwendung wird als Datenstruktur beschrieben.
- Automatische Hilfegenerierung: Schön und lesbar.
- Unterstützung von Aktionen: Jeder Befehl hat seine eigene Handler-Funktion.
- Integrierte Flag-Typen: Zeichenketten, Zahlen, boolesche Werte, Dauer und sogar Dateien.
Codebeispiel mit urfave/cli:
package main
import ( "fmt" "log" "os"
"github.com/urfave/cli/v2")
func main() { app := &cli.App{ Name: "calc", Usage: "A simple calculator", Comman Auch in der Bibliothek
E-Mail-Versand mit Go (Golang): Bibliotheken und Codebeispiele
Retrofit für Kotlin: Vollständiger Leitfaden mit Beispielen
Arbeiten mit ZIP-Archiven in PHP: vollständige Anleitung zu ZipArchive
Arbeiten mit Bildern in C# (.NET): Bibliotheken, Werkzeuge und Beispiele