Documentation ¶
Overview ¶
Package flagargs is a helper for stdlib flag (and github.com/spf13/pflag) to handle known positional arguments
Example:
import ( "containrrr.dev/flagargs" "flag" "fmt" ) var parser flagargs.Parser var name string func init() { flag.StringVar(&name, "name", "", "the name of the thing") parser = flagargs.NewParser("name") } func main() { flag.Parse() extra, err := parser.ParseAndUpdateFlags(flag.CommandLine, flag.CommandLine.Args()) if err != nil { _ = fmt.Errorf("error setting known arg flag: %v", err) return } fmt.Printf("name was set to %q\n", name) fmt.Printf("got %v extra argument(s): %v\n", len(extra), extra) }
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LocateDoubleDash ¶
LocateDoubleDash finds the first instance of "--" if present in the passed args
Types ¶
type FlagSetWithDash ¶
FlagSetWithDash is the interface used for locating the split between known- and extra args
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
Parser handles passed non-flag arguments and updates flags with positional args
func (*Parser) ParseAndUpdateFlags ¶
ParseAndUpdateFlags splits the args between known- and extra args the known args are set on flags using the corresponding key passed in NewParser
Example (PFlag) ¶
package main import ( "containrrr.dev/flagargs" "fmt" "github.com/spf13/pflag" ) func main() { flags := pflag.NewFlagSet("example", pflag.ExitOnError) flags.String("name", "", "the name of the thing") parser := flagargs.NewParser("name") // Normally you would get the args from os.Args: // _ = flags.Parse(os.Args) // In this example we'll just use a hard coded slice: _ = flags.Parse([]string{"arg1", "arg2", "arg3"}) extra, err := parser.ParseAndUpdateFlags(flags, flags.Args()) if err != nil { _ = fmt.Errorf("error setting known arg flag: %v", err) return } name, _ := flags.GetString("name") fmt.Printf("name was set to %q, ", name) fmt.Printf("got %v extra argument(s): %v\n", len(extra), extra) }
Output: name was set to "arg1", got 2 extra argument(s): [arg2 arg3]
Example (StdFlag) ¶
package main import ( "containrrr.dev/flagargs" "flag" "fmt" ) var parser *flagargs.Parser var name string func init() { flag.StringVar(&name, "name", "", "the name of the thing") parser = flagargs.NewParser("name") } func main() { flag.Parse() extra, err := parser.ParseAndUpdateFlags(flag.CommandLine, flag.CommandLine.Args()) if err != nil { _ = fmt.Errorf("error setting known arg flag: %v", err) return } fmt.Printf("name was set to %q\n", name) fmt.Printf("got %v extra argument(s): %v\n", len(extra), extra) }
Output:
Click to show internal directories.
Click to hide internal directories.