MCPcopy
hub / github.com/jessevdk/go-flags

github.com/jessevdk/go-flags @v1.6.1 sqlite

repository ↗ · DeepWiki ↗ · release v1.6.1 ↗
428 symbols 1,453 edges 38 files 76 documented · 18%
README

go-flags: a go library for parsing command line arguments

GoDoc

This library provides similar functionality to the builtin flag library of go, but provides much more functionality and nicer formatting. From the documentation:

Package flags provides an extensive command line option parser. The flags package is similar in functionality to the go builtin flag package but provides more options and uses reflection to provide a convenient and succinct way of specifying command line options.

Supported features: * Options with short names (-v) * Options with long names (--verbose) * Options with and without arguments (bool v.s. other type) * Options with optional arguments and default values * Multiple option groups each containing a set of options * Generate and print well-formatted help message * Passing remaining command line arguments after -- (optional) * Ignoring unknown command line options (optional) * Supports -I/usr/include -I=/usr/include -I /usr/include option argument specification * Supports multiple short options -aux * Supports all primitive go types (string, int{8..64}, uint{8..64}, float) * Supports same option multiple times (can store in slice or last option counts) * Supports maps * Supports function callbacks * Supports namespaces for (nested) option groups

The flags package uses structs, reflection and struct field tags to allow users to specify command line options. This results in very simple and concise specification of your application options. For example:

type Options struct {
    Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"`
}

This specifies one option with a short name -v and a long name --verbose. When either -v or --verbose is found on the command line, a 'true' value will be appended to the Verbose field. e.g. when specifying -vvv, the resulting value of Verbose will be {[true, true, true]}.

Example:

var opts struct {
    // Slice of bool will append 'true' each time the option
    // is encountered (can be set multiple times, like -vvv)
    Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"`

    // Example of automatic marshalling to desired type (uint)
    Offset uint `long:"offset" description:"Offset"`

    // Example of a callback, called each time the option is found.
    Call func(string) `short:"c" description:"Call phone number"`

    // Example of a required flag
    Name string `short:"n" long:"name" description:"A name" required:"true"`

    // Example of a flag restricted to a pre-defined set of strings
    Animal string `long:"animal" choice:"cat" choice:"dog"`

    // Example of a value name
    File string `short:"f" long:"file" description:"A file" value-name:"FILE"`

    // Example of a pointer
    Ptr *int `short:"p" description:"A pointer to an integer"`

    // Example of a slice of strings
    StringSlice []string `short:"s" description:"A slice of strings"`

    // Example of a slice of pointers
    PtrSlice []*string `long:"ptrslice" description:"A slice of pointers to string"`

    // Example of a map
    IntMap map[string]int `long:"intmap" description:"A map from string to int"`

    // Example of env variable
    Thresholds  []int     `long:"thresholds" default:"1" default:"2" env:"THRESHOLD_VALUES"  env-delim:","`
}

// Callback which will invoke callto:<argument> to call a number.
// Note that this works just on OS X (and probably only with
// Skype) but it shows the idea.
opts.Call = func(num string) {
    cmd := exec.Command("open", "callto:"+num)
    cmd.Start()
    cmd.Process.Release()
}

// Make some fake arguments to parse.
args := []string{
    "-vv",
    "--offset=5",
    "-n", "Me",
    "--animal", "dog", // anything other than "cat" or "dog" will raise an error
    "-p", "3",
    "-s", "hello",
    "-s", "world",
    "--ptrslice", "hello",
    "--ptrslice", "world",
    "--intmap", "a:1",
    "--intmap", "b:5",
    "arg1",
    "arg2",
    "arg3",
}

// Parse flags from `args'. Note that here we use flags.ParseArgs for
// the sake of making a working example. Normally, you would simply use
// flags.Parse(&opts) which uses os.Args
args, err := flags.ParseArgs(&opts, args)

if err != nil {
    panic(err)
}

fmt.Printf("Verbosity: %v\n", opts.Verbose)
fmt.Printf("Offset: %d\n", opts.Offset)
fmt.Printf("Name: %s\n", opts.Name)
fmt.Printf("Animal: %s\n", opts.Animal)
fmt.Printf("Ptr: %d\n", *opts.Ptr)
fmt.Printf("StringSlice: %v\n", opts.StringSlice)
fmt.Printf("PtrSlice: [%v %v]\n", *opts.PtrSlice[0], *opts.PtrSlice[1])
fmt.Printf("IntMap: [a:%v b:%v]\n", opts.IntMap["a"], opts.IntMap["b"])
fmt.Printf("Remaining args: %s\n", strings.Join(args, " "))

// Output: Verbosity: [true true]
// Offset: 5
// Name: Me
// Ptr: 3
// StringSlice: [hello world]
// PtrSlice: [hello world]
// IntMap: [a:1 b:5]
// Remaining args: arg1 arg2 arg3

More information can be found in the godocs: http://godoc.org/github.com/jessevdk/go-flags

Extension points exported contracts — how you extend this code

Commander (Interface)
Commander is an interface which can be implemented by any command added in the options. When implemented, the Execute me [5 …
command.go
Unmarshaler (Interface)
Unmarshaler is the interface implemented by types that can unmarshal a flag argument to themselves. The provided value i [3 …
convert.go
SplitArgument (Interface)
SplitArgument represents the argument value of an option that was passed using an argument separator. [2 implementers]
parser.go
Completer (Interface)
Completer is an interface which can be implemented by types to provide custom command line argument completion. [1 implementers]
completion.go
Usage (Interface)
Usage is an interface which can be implemented to show a custom usage string in the help message shown for a command.
command.go
Marshaler (Interface)
Marshaler is the interface implemented by types that can marshal themselves to a string representation of the flag. [2 …
convert.go
ValueValidator (Interface)
ValueValidator is the interface implemented by types that can validate a flag argument themselves. The provided value is [1 …
convert.go

Core symbols most depended-on inside this repo

NewParser
called by 54
parser.go
ParseArgs
called by 52
parser.go
Get
called by 36
multitag.go
newErrorf
called by 24
error.go
AddGroup
called by 20
group.go
NewNamedParser
called by 18
parser.go
Error
called by 17
error.go
manQuote
called by 17
man.go

Shape

Function 217
Method 146
Struct 45
TypeAlias 12
Interface 7
FuncType 1

Languages

Go100%

Modules by API surface

command_test.go38 symbols
command.go32 symbols
parser.go28 symbols
option.go25 symbols
ini.go24 symbols
parser_test.go23 symbols
group.go21 symbols
short_test.go19 symbols
completion.go19 symbols
ini_test.go17 symbols
convert.go16 symbols
pointer_test.go15 symbols

Dependencies from manifests, versioned

golang.org/x/sysv0.21.0 · 1×

For agents

$ claude mcp add go-flags \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact