Documentation
¶
Overview ¶
Package clarg provides simple Sub-Commands for Go using flag package - can be used via copy/paste too, because it's small and it's just some functions!
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Parse ¶
Parse parses arguments for list of commands. The first command is the default command (top level args) and can be nil. Non-Flag args are available via matched FlagSet's Args() method.
Example ¶
topFlags := flag.NewFlagSet("", flag.ExitOnError)
cmdListFlags := flag.NewFlagSet("list", flag.ExitOnError)
cmdSendFlags := flag.NewFlagSet("send", flag.ExitOnError)
var cmdDefault struct {
count int
data string
}
var cmdList struct {
age int
name string
}
var cmdSend struct {
dst string
payload string
}
topFlags.IntVar(&cmdDefault.count, "cnt", 0, "-cnt <count>")
topFlags.StringVar(&cmdDefault.data, "data", "", "-data <data string>")
cmdListFlags.IntVar(&cmdList.age, "age", -1, "-age <age>")
cmdListFlags.StringVar(&cmdList.name, "name", "", "-name <name>")
cmdSendFlags.StringVar(&cmdSend.dst, "dst", "", "-dst <destination>")
cmdSendFlags.StringVar(&cmdSend.payload, "p", "", "-p <payload>")
if cmd, err := Parse(topFlags,
cmdListFlags,
cmdSendFlags); err != nil {
// show/handle error
} else {
_ = cmd // the matched *flag.FlagSet
}
// use values of back fields for flags
Example (Env) ¶
topFlags := flag.NewFlagSet("", flag.ExitOnError)
var cmdDefault struct {
count int
data string
}
topFlags.IntVar(&cmdDefault.count, "cnt", 0, "-cnt <count>")
topFlags.StringVar(&cmdDefault.data, "data", "", "-data <data string>")
if cmd, err := Parse(topFlags); err != nil {
// show/handle error
} else {
fromenv := func(set *flag.FlagSet, flagName, envName string) error {
f := set.Lookup(flagName)
if f == nil {
return nil
}
if f.Value.String() != f.DefValue {
return nil
}
e := os.Getenv(envName)
if e == "" {
return nil
}
if e == f.DefValue {
return nil
}
return f.Value.Set(e)
}
topFlags.VisitAll(func(f *flag.Flag) {
// sample env var name convention: APPNAME_FLAGNAME
if err := fromenv(topFlags,
f.Name,
strings.ToUpper(filepath.Base(os.Args[0])+"_"+f.Name)); err != nil {
log.Fatal(err)
}
})
_ = cmd // the matched *flag.FlagSet
}
// use values of back fields for flags
Example (NonArgs) ¶
topFlags := flag.NewFlagSet("", flag.ExitOnError)
var cmdDefault struct {
count int
data string
}
topFlags.IntVar(&cmdDefault.count, "cnt", 0, "-cnt <count>")
topFlags.StringVar(&cmdDefault.data, "data", "", "-data <data string>")
if cmd, err := Parse(topFlags); err != nil {
// show/handle error
} else {
nonFlags := topFlags.Args()
_ = cmd // the matched *flag.FlagSet
_ = nonFlags
}
// use values of back fields for flags
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.