go-cli-builder

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 16, 2025 License: MIT

README

Go CLI Builder

A lightweight and flexible library for building command-line interfaces (CLIs) in Go. This library provides a simple and intuitive way to define commands, flags (including short names), aliases and more.

Features

  • Simple Command Definition: Easily define commands and subcommands with names, usage descriptions, and detailed descriptions.
  • Flag Handling: Supports string, integer, and boolean flags with default values and the ability to allow arguments.
  • Short Flag Names: Implements short names for flags (e.g., -n for --name).
  • Root Flags: Allows defining flags at the root level that are accessible to all subcommands.
  • Environment Variable Integration: Provides convenient functions to retrieve values from environment variables with default fallbacks.
  • Built-in Help Generation: Automatically generates help messages for the root command and subcommands.
  • Customizable Logging: Includes a basic logging system with different levels (info, warning, error, success).
  • Command Aliases: Supports creating aliases for commands and subcommands.
  • Shell Completion: Generates shell completion scripts for Bash, Zsh, and Fish.

Getting Started

Installation
go get github.com/mirkobrombin/go-cli-builder
Basic Usage
package main

import (
	"fmt"
	"os"

	"github.com/mirkobrombin/go-cli-builder/v1/root"
	"my-cli/commands"
)

func main() {
	rootCmd := root.NewRootCommand("mycli", "mycli [command]", "A simple CLI example", "1.0.0")

	rootCmd.AddBoolFlag("verbose", "v", "Enable verbose output", false, false)

	rootCmd.AddCommand(commands.NewAddCommand())
	rootCmd.AddCommand(commands.NewRemoveCommand())
	rootCmd.AddCommand(commands.NewListCommand())

	if err := rootCmd.Execute(); err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}
}

Note, the verbose flag was registered at the root level, so it can be accessed by all subcommands via the rootFlags parameter in the Run function, e.g.:

func runSubcommand(cmd *command.Command, rootFlags *command.RootFlags, args []string) error {
    if rootFlags.GetBool("verbose") {
        cmd.Logger.Info("Verbose output enabled")
    }
    // ...
    return nil
}

For more detailed information, please refer to the documentation files in the docs/ directory.

Documentation

License

This project is licensed under the MIT License. See the LICENSE file for details.

Directories

Path Synopsis
examples
v1 command
v1
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL