Cobra for Go: Complete Guide with Examples

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Introduction to Cobra: What It Is and Why You Need It

Cobra is a powerful library for the Go programming language, designed for creating modern command-line interfaces (CLI). It provides a simple and intuitive API for building complex applications with support for nested commands, flags, arguments, and automatic help generation.

Why do you need Cobra? In modern development, CLI tools play a key role: from DevOps utilities to everyday developer tools. Cobra solves several critical tasks:

  • Command structuring: allows you to create a hierarchy of commands (e.g., app server start, app config set).
  • Automatic help: generates documentation based on your commands and flags.
  • Flexible argument handling: supports positional arguments, required and optional flags.
  • Integration with Viper: easily combines with the Viper library for configuration management.
  • Development speed: thanks to the cobra-cli code generator, you can create an application skeleton in seconds.

Cobra is used in well-known projects such as Kubernetes, Hugo, Docker (partially), GitHub CLI, and many others.



Installing Cobra

Installing Cobra in a Go project is done using the standard method via Go modules. Make sure you have Go version 1.16 or higher installed.

# Initialize a module (if not already done)go mod init mycli

# Install Cobrago get -u github.com/spf13/cobra@latest

# Install the cobra-cli generator (optional but recommended)go install github.com/spf13/cobra-cli@latest

After installation, you can check the Cobra version in your go.mod file. The cobra-cli generator will create a basic project structure with the correct configuration.



Quick Start with Cobra

Let's create a simple CLI application that prints a greeting. First, initialize the project using cobra-cli:

cobra-cli init myappcd myapp

This command will create a file structure: main.go, cmd/root.go. Now let's add a hello command:

cobra-cli add hello

After that, edit the cmd/hello.go file:

package cmd

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

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

var helloCmd = &cobra.Command{ Use: "hello", Short: "Prints a greeting", Long: `The hello command prints a personalized greeting to the user.`, Run: func(cmd *cobra.Command, args []string) { name, _ := cmd.Flags().GetString("name") if name == "" { name = "World" } fmt.Printf("Hello, %s!", name) },}

func init() { helloCmd.Flags().StringP("name", "n", "", "Name for the greeting")}

Now run the application:

go run main.go hello --name "Alice"# Output: Hello, Alice!

go run main.go hello# Output: Hello, World!


Main Methods and Functions of Cobra



1. cobra.Command — Creating a Command

What it does: Defines a new command in the CLI application. This is the main building block of Cobra.

Parameters:

  • Use — command name and usage template (e.g., "hello [name]")
  • Short — short description (displayed in the command list)
  • Long — detailed description (displayed in help)
  • Run — function executed when the command is called
  • Args — argument validator (e.g., cobra.ExactArgs(2))
var versionCmd = &cobra.Command{                    

Recommendations