Jak používat balíček Cobra v Go

Úvod do Cobry

Cobra představuje robustní framework pro tvorbu rozhraní příkazového řádku v jazyce Go. Nabízí soubor nástrojů a konvencí, které usnadňují vývoj příkazů, podřízených příkazů, parametrů a automatické generování dokumentace. V Go komunitě je Cobra považována za osvědčenou a široce používanou volbu pro budování konzolových aplikací.

Tento článek poskytuje komplexní návod k používání knihovny Cobra v jazyce Go. Projdeme si základní principy, funkce a doporučené postupy pro efektivní využití tohoto mocného nástroje.

Instalace knihovny Cobra

Prvním krokem je přidání knihovny Cobra do vašeho Go projektu. To lze provést pomocí příkazu go get:

go get github.com/spf13/cobra

Po dokončení instalace můžete knihovnu Cobra importovat do vašeho Go kódu:

import "github.com/spf13/cobra"

Vytvoření základního příkazu

Začneme vytvořením jednoduchého příkazu, který vypíše textovou zprávu. Vytvořte nový Go soubor a vložte následující kód:


package main

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

func main() {
    cmd := &cobra.Command{
        Use:   "muj-prikaz",
        Short: "Vypíše zprávu",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("Ahoj, Cobra!")
        },
    }

    if err := cmd.Execute(); err != nil {
        fmt.Println(err)
        return
    }
}

Rozbor kódu:

  • Inicializujeme instanci struktury cobra.Command, která reprezentuje náš příkaz.
  • Atribut Use definuje název příkazu.
  • Atribut Short obsahuje krátký popis příkazu.
  • Atribut Run obsahuje funkci, která se spustí po zavolání příkazu. V tomto případě vypíšeme „Ahoj, Cobra!“.
  • Metoda Execute je volána pro spuštění příkazu.

Po spuštění tohoto programu v terminálu se zobrazí zpráva „Ahoj, Cobra!“.

Zavedení podřízených příkazů

Cobra umožňuje vytvářet podřízené příkazy, které rozšiřují funkcionalitu hlavního příkazu. Podřízený příkaz je příkaz, který je hierarchicky podřízen jinému příkazu. Zavedeme podřízený příkaz s názvem pozdrav, který akceptuje jméno jako argument:


func main() {
    rootCmd := &cobra.Command{
        Use:   "muj-prikaz",
        Short: "Vypíše zprávu",
    }

    greetCmd := &cobra.Command{
        Use:   "pozdrav",
        Short: "Vypíše pozdrav",
        Run: func(cmd *cobra.Command, args []string) {
            if len(args) == 0 {
                fmt.Println("Ahoj, Cobra!")
            } else {
                fmt.Printf("Ahoj, %s!\n", args[0])
            }
        },
    }

    rootCmd.AddCommand(greetCmd)

    if err := rootCmd.Execute(); err != nil {
        fmt.Println(err)
        return
    }
}

Rozbor kódu:

  • Nejprve vytvoříme hlavní (kořenový) příkaz rootCmd.
  • Poté vytvoříme podřízený příkaz greetCmd.
  • Podřízený příkaz greetCmd připojíme k hlavnímu příkazu pomocí metody AddCommand.

Nyní můžeme spustit příkaz s podřízeným příkazem pozdrav a zadat jméno jako argument:

muj-prikaz pozdrav Jan

Tento příkaz vypíše zprávu „Ahoj, Jan!“.

Použití parametrů (flags)

Cobra umožňuje definovat parametry, které uživatelům umožňují přizpůsobit chování příkazu. Přidáme parametr --jmeno do příkazu pozdrav:


greetCmd := &cobra.Command{
    Use:   "pozdrav",
    Short: "Vypíše pozdrav",
    Run: func(cmd *cobra.Command, args []string) {
        jmeno, _ := cmd.Flags().GetString("jmeno")
        if len(args) == 0 {
            fmt.Printf("Ahoj, %s!\n", jmeno)
        } else {
            fmt.Printf("Ahoj, %s!\n", args[0])
        }
    },
}

greetCmd.Flags().StringP("jmeno", "j", "", "Vaše jméno")

Rozbor kódu:

  • Voláme metodu Flags nad příkazem greetCmd pro získání objektu cobra.Command.Flags.
  • Metodou StringP definujeme parametr --jmeno. Atribut „jmeno“ definuje dlouhou verzi parametru, „j“ krátkou verzi, „“ výchozí hodnotu a „Vaše jméno“ popis.
  • Ve funkci Run příkazu získáváme hodnotu parametru --jmeno pomocí metody GetString.

Generování dokumentace

Cobra nabízí možnost automatického generování dokumentace pro vaše příkazy a parametry. K vygenerování dokumentace použijte příkaz cobra-gen:

cobra-gen doc

Tento příkaz vygeneruje dokumentaci ve formátu Markdown pro váš příkaz v souboru docs/muj-prikaz.md.

Závěr

Knihovna Cobra je efektivní nástroj pro vytváření robustních a uživatelsky přívětivých rozhraní příkazového řádku v jazyce Go. V tomto článku jsme se seznámili se základními principy, funkcemi a doporučenými postupy používání Cobry. S její pomocí můžete vytvářet komplexní konzolové aplikace, které splňují specifické potřeby vašich uživatelů.

Pro další informace o knihovně Cobra doporučujeme prostudovat si její oficiální dokumentaci a prohlédnout si poskytnuté příklady.

Často kladené otázky

1. Co je to Cobra package?
Cobra je Go knihovna určená pro tvorbu rozhraní příkazového řádku.

2. Jak nainstaluji Cobra package?
Použitím příkazu go get github.com/spf13/cobra.

3. Jak vytvořím základní příkaz pomocí Cobry?
Inicializací struktury cobra.Command a definováním jejích atributů Use, Short a Run.

4. Jak přidám podřízený příkaz?
Inicializací instance struktury cobra.Command pro podřízený příkaz a jeho připojením k hlavnímu příkazu pomocí metody AddCommand.

5. Jak přidám parametry k příkazu?
Voláním metody Flags nad příkazem a následným použitím metod Bool, Int, String a dalších.

6. Jak vygeneruji dokumentaci k příkazu?
Pomocí příkazu cobra-gen doc.

7. Je Cobra kompatibilní s Go moduly?
Ano, Cobra plně podporuje Go moduly.

8. Jaké jsou doporučené postupy při používání Cobry?

  • Používejte jednotné pojmenování příkazů a parametrů.
  • Vytvářejte stručné a jasné popisy pro příkazy a parametry.
  • Nastavujte výchozí hodnoty parametrů.
  • Pro organizaci příkazů do logických celků využívejte podřízené příkazy.
  • Generujte dokumentaci pro všechny vaše příkazy.