Pular para o conteúdo principal

victorstein.dev

40/100 Dias de Golang - Cobra CLI

Table of Contents

# Cobra CLI

Vamos iniciar o desenvolvimento de um CLI utilizando o Cobra. O Cobra é uma biblioteca poderosa para criar CLIs em Go. Ela é usada por ferramentas populares como o Kubernetes e o Hugo. Vamos iniciar um projeto e adicionar o Cobra.

go mod init novacli

Instalar o cobra

go install github.com/spf13/cobra-cli@latest

Para iniciar o projeto com cobra utilizamos o comando:

cobra-cli init

Isso criará uma estrutura básica com um comando raiz (cmd/root.go).

Vamos adicionar um novo comando:

cobra-cli add olaMundo

Isso cria o arquivo cmd/hello.go. Vamos mudar um pouco o conteúdo dele:

/*
Copyright © 2025 NAME HERE <EMAIL ADDRESS>
*/
package cmd

import (
	"fmt"

	"github.com/spf13/cobra"
)

var olaMundoCmd = &cobra.Command{
	Use:   "olaMundo",
	Short: "Olá mundo COBRA CLI",
	Long:  `Nosso primeiro comando utilizando CobraCLI que imprime um Olá Mundo para o usuário!`,
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("Olá Mundo")
	},
}

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

Podemos testar rodando:

go run main.go olaMundo 

Agora vamos adicionar um flag de nome, para que o Olá Mundo seja personalizado. Veja como é simples:

package cmd

import (
	"fmt"

	"github.com/spf13/cobra"
)

var nome string

var olaMundoCmd = &cobra.Command{
	Use:   "olaMundo",
	Short: "Olá mundo COBRA CLI",
	Long:  `Nosso primeiro comando utilizando CobraCLI que imprime um Olá Mundo para o usuário!`,
	Run: func(cmd *cobra.Command, args []string) {
		if nome != "" {
			fmt.Printf("Olá Mundo, %s!\n", nome)
		} else {
			fmt.Println("Use --nome SEU_NOME")
		}
	},
}

func init() {
	rootCmd.AddCommand(olaMundoCmd)
	olaMundoCmd.Flags().StringVarP(&nome, "nome", "n", "", "Seu nome")

}

Definimos a variável nome, fazemos a lógica dentro do Run e no init definimos a flag olaMundoCmd.Flags().StringVarP(&nome, "nome", "n", "", "Seu nome"), essa função serve para criar uma flag de linha de comando do tipo string, que pode ser usada com –nome ou -n. O último parâmetro “Seu nome” é um texto de ajuda que aparece quando usar –help.

# Compilando a CLI

Para gerar o binário:

go build -o olaMundoGolang

Um binário de nome olaMundoGolango será criado. Depois é só executar:

./olaMundoGolang olaMundo --nome Victor