package flags import ( "errors" "fmt" goflags "github.com/jessevdk/go-flags" "os" ) var PrintedHelpErr = goflags.ErrHelp var NotEnoughArgs = errors.New("not enough arguments") type Options struct { Foreground bool `short:"f" long:"foreground" description:"Run in the foreground"` ConfigFile string `short:"c" long:"config" description:"Configuration file location" value-name:"FILE"` PidFile string `short:"p" long:"pid" description:"PID file location"` Positional struct { InterfaceName string `required:"yes" positional-arg-name:"INTERFACE-NAME" description:"Interface name"` } `positional-args:"yes"` } func ParseFlags() (*Options, error) { o := new(Options) parser := goflags.NewParser(o, goflags.Default) _, err := parser.Parse() if err != nil { parser.WriteHelp(os.Stdout) return nil, err } if o.ConfigFile == "" { o.ConfigFile = fmt.Sprintf(DefaultConfigFile, o.Positional.InterfaceName) } if o.PidFile == "" { o.PidFile = fmt.Sprintf(DefaultPidFile, o.Positional.InterfaceName) } return o, nil }