package main import ( "flag" "log" "os" "github.com/itzg/go-flagsfiller" ) type cmd struct { cmd func([]string, any) config any fs *flag.FlagSet } func (c *cmd) Register(name string) { c.fs = flag.NewFlagSet(name, flag.ExitOnError) if c.config != nil { filler := flagsfiller.New() err := filler.Fill(c.fs, c.config) if err != nil { log.Fatal(err) } } } func (c *cmd) Run(name string) { c.fs.Parse(os.Args[2:]) c.cmd(c.fs.Args(), c.config) } var commands = map[string]*cmd{ "request": { request, nil, nil, }, "create": { create, &createFlags{}, nil, }, }