Gocmd: A Go Library for Building Command Line Applications


A Go library for building command line applications.


  • Advanced command line arguments handling
    • Subcommand handling
    • Short and long command line arguments
    • Multiple arguments (repeated or delimited)
    • Support for environment variables
    • Well formatted usage printing
    • Auto usage and version printing
    • Unknown argument handling
  • Output tables in the terminal
  • Template support for config files
  • No external dependency


go get github.com/devfacet/gocmd/v3


A basic app

For the full code click here.

func main() {
    flags := struct {
        Help      bool `short:"h" long:"help" description:"Display usage" global:"true"`
        Version   bool `short:"v" long:"version" description:"Display version"`
        VersionEx bool `long:"vv" description:"Display version (extended)"`
        Echo      struct {
            Settings bool `settings:"true" allow-unknown-arg:"true"`
        } `command:"echo" description:"Print arguments"`
        Math struct {
            Sqrt struct {
                Number float64 `short:"n" long:"number" required:"true" description:"Number"`
            } `command:"sqrt" description:"Calculate square root"`
            Pow struct {
                Base     float64 `short:"b" long:"base" required:"true" description:"Base"`
                Exponent float64 `short:"e" long:"exponent" required:"true" description:"Exponent"`
            } `command:"pow" description:"Calculate base exponential"`
        } `command:"math" description:"Math functions" nonempty:"true"`

    // Echo command
    gocmd.HandleFlag("Echo", func(cmd *gocmd.Cmd, args []string) error {
        fmt.Printf("%s\n", strings.Join(cmd.FlagArgs("Echo")[1:], " "))
        return nil

    // Math commands
    gocmd.HandleFlag("Math.Sqrt", func(cmd *gocmd.Cmd, args []string) error {
        return nil
    gocmd.HandleFlag("Math.Pow", func(cmd *gocmd.Cmd, args []string) error {
        fmt.Println(math.Pow(flags.Math.Pow.Base, flags.Math.Pow.Exponent))
        return nil

    // Init the app
        Name:        "basic",
        Description: "A basic app",
        Version:     fmt.Sprintf("%s (%s)", version, gitCommit),
        Flags:       &flags,
        ConfigType:  gocmd.ConfigTypeAuto,


# Run tests
make test

# Continuous testing
make test-ui

# Benchmarks
make test-benchmarks



Download Details:

Author: devfacet
Source Code: https://github.com/devfacet/gocmd 
License: MIT license

#go #golang #commandline 

Gocmd: A Go Library for Building Command Line Applications
1.55 GEEK