22 Erstellen einer CLI-Anwendung

22.0.1 Grundlagen einer CLI-Anwendung

Eine CLI (Command Line Interface) ermöglicht die Interaktion mit einem Programm über Textbefehle. CLI-Anwendungen sind in vielen Bereichen nützlich, darunter Automatisierung, DevOps und Systemadministration.

22.0.2 Warum eine CLI-Anwendung erstellen?

CLI-Anwendungen bieten: - Automatisierung: Erleichtern das Automatisieren wiederholbarer Aufgaben. - Skriptbarkeit: Können leicht in Skripte integriert werden. - Ressourceneffizienz: Haben geringeren Ressourcenbedarf im Vergleich zu grafischen Benutzeroberflächen.

22.0.3 Beispiel einer CLI-Anwendung

22.0.3.1 Schritt 1: Projektstruktur erstellen

Erstellen einer Verzeichnisstruktur:

mkdir mycli
cd mycli
go mod init example.com/mycli

22.0.3.2 Schritt 2: Das flag Paket nutzen

Das flag Paket in Go erleichtert die Definition und das Parsen von Befehlszeilenargumenten.

Beispiel:

// main.go
package main

import (
    "flag"
    "fmt"
)

func main() {
    // Flags definieren
    name := flag.String("name", "World", "a name to say hello to")
    age := flag.Int("age", 0, "your age")

    // Flags parsen
    flag.Parse()

    // Logik basierend auf den Flags
    fmt.Printf("Hello, %s!\n", *name)
    if *age > 0 {
        fmt.Printf("You are %d years old.\n", *age)
    }
}

Ausführen der Anwendung:

go run main.go -name Alice -age 30

22.0.4 Interaktive CLI-Anwendungen

22.0.4.1 Eingaben vom Benutzer lesen

Mit fmt kann Eingabe von der Kommandozeile gelesen werden.

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter your name: ")
    name, _ := reader.ReadString('\n')
    fmt.Printf("Hello, %s\n", name)
}

22.0.5 Erweiterte CLI-Anwendungen

22.0.5.1 Nutzung des cobra Pakets

Das cobra Paket bietet umfangreiche Funktionen zur Erstellung komplexer CLI-Anwendungen.

Installation:

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

Beispiel:

cobra init --pkg-name example.com/mycli
cd mycli
cobra add greet

Bearbeiten der cmd/greet.go Datei:

package cmd

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

var name string

// greetCmd represents the greet command
var greetCmd = &cobra.Command{
    Use:   "greet",
    Short: "Greet the user",
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Printf("Hello, %s!\n", name)
    },
}

func init() {
    rootCmd.AddCommand(greetCmd)
    greetCmd.Flags().StringVarP(&name, "name", "n", "World", "Name to greet")
}

Anwendung ausführen:

go run main.go greet --name Alice

22.0.6 Flags und Argumente parsen

22.0.6.1 Nutzung des pflag Pakets

Das pflag Paket ist ein Drop-in-Ersatz für das flag Paket und bietet erweiterte Funktionen.

Installation:

go get github.com/spf13/pflag

Beispiel:

package main

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

func main() {
    name := pflag.String("name", "World", "Name to greet")
    pflag.Parse()
    fmt.Printf("Hello, %s!\n", *name)
}

22.0.7 Bauen und Verteilen der CLI-Anwendung

22.0.7.1 Kompilieren der Anwendung

Erstellung einer ausführbaren Datei:

go build -o mycli

22.0.7.2 Verteilen der Anwendung

Beispiel Dockerfile:

FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o mycli
ENTRYPOINT ["./mycli"]