Blog

CLI-Anwendungen in Go - unterhaltsam, effektiv und sehr einfach zu erstellen

Dennis Vriend

Aktualisiert Oktober 21, 2025
5 Minuten

In früheren Blogs über Go haben wir uns die Programmiersprache Go angesehen und wie man Go in AWS Lambda ausführt. Wir haben auch gesehen, wie man Go-Code crosskompiliert, so dass er auf den Plattformen Linux, Mac und Windows läuft. Wir haben uns auch das AWS SDK für Go angesehen, mit dem sich Go-Anwendungen ganz einfach in die gesamte Palette der AWS-Services integrieren lassen. Dieses Mal werden wir Anwendungen für die Befehlszeilenschnittstelle (CLI) in Go erstellen. Lassen Sie uns loslegen!

Kommandozeilen-Anwendungen

Command Line Interface (CLI)-Anwendungen sind winzige Anwendungen mit einem ganz bestimmten Schwerpunkt. Diese Anwendungen werden oft als 'Tools' bezeichnet und helfen uns bei gängigen Vorgängen, die wir oft automatisieren möchten. Wenn wir uns die Kommandozeilenanwendungen genauer ansehen, sehen wir, dass diese Anwendungen um Befehle, Argumente und Flags herum strukturiert sind. Befehle stehen für Aktionen/Verben, Args sind Dinge/Namen/Objekte und Flags sind Modifikatoren/Adjektive (Eigenschaft/Zustand) für Aktionen.
Zum Beispiel:

#       action  thing/object   property/state
$ myapp verb    noun           --adjective

#     action   thing/object                                       state
$ git clone    git@github.com:binxio/cfn-certificate-provider.git --bare

#    action   thing/object
$ go get -u   github.com/aws/aws-sdk-go/...      

Kobra

Um CLI-Anwendungen zu erstellen, werden wir Cobra verwenden, eine Bibliothek zur Erstellung leistungsstarker moderner CLI-Anwendungen. Cobra wird von beliebten Go-Projekten wie Kubernetes, Docker, OpenShift, Hugo und anderen verwendet, um ihre CLI-Schnittstellen zu erstellen. Wenn Sie also das nächste Mal 'docker run -it ubuntu' eingeben, wissen Sie, dass Cobra dahintersteckt!

Code Generator

Cobra wird mit einem Code-Generator/Scaffold geliefert, der durch Eingabe von cobra gestartet werden kann. Cobra macht es sehr einfach, CLI-Anwendungen zu erstellen, da es gängige Operationen wie die Initialisierung einer neuen Projektstruktur, die Bootstrap-Code enthält, und das Hinzufügen von Befehlen, die Skeleton-Code enthalten, unterstützt. Der Befehl init erstellt ein neues Projekt und der Befehl add fügt der Anwendung neue Befehle hinzu.

Cobra installieren

So installieren Sie den Typ Cobra:

$ go get github.com/spf13/cobra/cobra

$ cobra --help
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
...

Greeter erstellen

Lassen Sie uns eine 'Greeter'-App erstellen, die eine Begrüßungsnachricht auf der Konsole ausgibt.

$ cobra init --author "Dennis Vriend" --license apache github.com/dnvriend/greeter

Der Befehl erstellt die folgende Verzeichnisstruktur mit einer Apache2-Lizenzdatei, einer 'main.go'-Datei, die die CLI-Anwendung bootet, und einem einzigen 'root.go'-Befehl im 'cmd'-Paket. Der Befehl root ist ein Container für Befehle. Wir haben noch keine Befehle hinzugefügt.

.
├── LICENSE
├── cmd
│   └── root.go
└── main.go

Lassen Sie die Anwendung laufen:

$ go run github.com/dnvriend/greeter
A longer content that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Die Ausgabe erfolgt über den Text, der mit dem Befehl 'root.go' konfiguriert wurde. Lassen Sie uns einen Befehl hinzufügen.

Begrüßungsbefehl hinzufügen

$ cobra add greet -t github.com/dnvriend/greeter

Wir haben jetzt die folgende Verzeichnisstruktur:

.
├── LICENSE
├── cmd
│   ├── greet.go
│   └── root.go
└── main.go

Der Befehl 'greet.go' wurde hinzugefügt. Lassen Sie uns die Anwendung ausführen:

$ go run github.com/dnvriend/greeter
A longer content that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
  greeter [command]

Available Commands:
  greet       A brief content of your command
  help        Help about any command

Flags:
      --config string   config file (default is $HOME/.greeter.yaml)
  -h, --help            help for greeter
  -t, --toggle          Help message for toggle

Use "greeter [command] --help" for more information about a command.

$ go run github.com/dnvriend/greeter greet
greet called

Die Nachricht ist ziemlich langweilig. Bearbeiten wir die Datei greet.go:

package cmd

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

var greetCmd = &cobra.Command{
    Use:   "greet",
    Short: "Prints a greet message",
    Long: Prints a greet message,
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("Hello World! " + strings.Join(args, " "))
    },
}

func init() {
    rootCmd.AddCommand(greetCmd)
}

Lassen Sie den 'Greeter' laufen:

$ go run github.com/dnvriend/greeter greet a b c
Hello World! a b c

Hinzufügen einer Flagge

Fügen wir das Flag 'name' zum Befehl 'greet' hinzu. Dazu müssen wir die Datei 'greet.go' bearbeiten und das Flag 'name' zur greetCmd hinzufügen. Nachdem das Flag 'name' hinzugefügt wurde, kann das Flag im Run command handler abgefragt werden.

package cmd

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

var greetCmd = &cobra.Command{
    Use:   "greet",
    Short: "Prints a greet message",
    Long: Prints a greet message,
    Run: func(cmd *cobra.Command, args []string) {
        name := cmd.Flag("name")
        if name.Value.String() == "" {
            fmt.Printf("Hello World! %sn", strings.Join(args, " "))
        } else {
            fmt.Printf("Hello %s, %sn", name.Value.String(), strings.Join(args, " "))
        }
    },
}

func init() {
    rootCmd.AddCommand(greetCmd)
    greetCmd.Flags().StringP("name", "n", "", "The name to use")
}

Greeter ist nun fertig. Lassen Sie uns die Anwendung in den Ordner 'bin' installieren.

$ go install github.com/dnvriend/greeter

$ $GOPATH/bin/greeter greet --name "Dennis Vriend" a b c
Hello Dennis Vriend, a b c

Fazit

Mit Cobra können Sie leistungsstarke CLI-Anwendungen auf der Basis von Go erstellen. Cobra wird mit einem Code-Generator geliefert, mit dem Sie schnell CLI-Anwendungen starten können. Cobra bietet auch eine Bibliothek zur Implementierung von CLI-Anwendungen. Cobra bietet Befehle, um das Verhalten zu definieren und Flags, um das Verhalten Ihrer CLI-Anwendungen zu ändern. Beim nächsten Mal werden wir uns ansehen, wie Sie das Go AWS SDK mit Cobra integrieren können, um praktische Dienstprogramme zu erstellen, die uns bei allgemeinen Aufgaben helfen.


Tags:

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.