Skip to content

ProfOak/flag2

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Flag2

A more traditional flag library for the go programming language

What?

A more traditional flag library for the Go programming language. I also have a long history with Python, so the implimentation code looks similar to Python's argparse class.

Why?

I did not like how the flag library that comes with Go parses command line flags.

Differences

  • You can define full word flags with the -- prefix. You can define single character flags with the - prefix.

  • Example of a full word flag: --help

  • Example of a single character flag: -h

  • Single character strings can be grouped, but only for boolean types: -abcd is essentially -a, -b, -c, -d

    • This only works for boolean type flags
  • -- denotes the end of the command line flag options

    • Everything to the right of -- will not be counted as flags

Getting started

To install: go get github.com/ProfOak/flag2

package main

import (
    "os"
    "fmt"
    "github.com/ProfOak/flag2"
)

func main() {
    f := flag2.NewFlag()

    // short flag, long flag, description, default argument
    f.AddString("n", "name", "this flag wants a name as input", "billy")
    f.AddBool("b", "bool", "this flag will store true", false)

    // a help flag is added during the parse step
    options, args := f.Parse(os.Args)

    // A usage method is provided, with details about each flag

    // unfortunate side effect of interfaces
    if options["help"] == true {
        f.Usage()
    }

    fmt.Println()
    if options["name"] != nil {
        fmt.Println("The name is:", options["name"])
    }

    fmt.Println()
    fmt.Println("===== FINAL RESULTS =====")
    fmt.Println("Options:", options)
    fmt.Println("Args:", args)
}

The result of running this program:

go run main.go -b -n ProfOak Extra args

--- Bools ---
-b, --bool      this flag will store true
-h, --help      Display this message and exit

--- Strings ---
-n, --name      this flag wants a name as input

Name is: ProfOak

===== FINAL RESULTS =====
Options: map[help:true bool:true name:ProfOak]
Args: [Extra args]

Reference ./test/test.go for a more detailed example.

About

A more traditional flag library for the go programming language

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages