@@ -102,19 +102,7 @@ func (a *App) addCmd(c *Cmd) {
102102 a .NameWidth = mathutil .MaxInt (a .NameWidth , ln )
103103
104104 // attach handle func
105- if c .Func != nil {
106- // fix: init c.CFlags on not exist
107- if c .CFlags == nil {
108- c .CFlags = NewEmpty (func (cf * CFlags ) {
109- cf .Desc = c .Desc
110- cf .FlagSet = flag .NewFlagSet (c .Name , flag .ContinueOnError )
111- })
112- }
113-
114- c .CFlags .Func = func (_ * CFlags ) error {
115- return c .Func (c )
116- }
117- }
105+ c .init ()
118106
119107 if c .OnAdd != nil {
120108 c .OnAdd (c )
@@ -244,14 +232,19 @@ func (a *App) showHelp() error {
244232 return nil
245233}
246234
247- // Cmd struct
235+ //
236+ // region Command in app
237+ // -----------------------------------
238+
239+ // Cmd struct. see CFlags
248240type Cmd struct {
249241 * CFlags
250242 Name string
251243 Desc string // desc for command, will sync set to CFlags.Desc
252- // OnAdd hook func. you can add some cli options or arguments.
244+ // OnAdd hook func. fire on add to App
245+ // - you can add some cli options or arguments.
253246 OnAdd func (c * Cmd )
254- // Func for run command, will call after options parsed.
247+ // Func for run command, will call after options parsed. will sync set to CFlags.Func
255248 Func func (c * Cmd ) error
256249}
257250
@@ -281,6 +274,45 @@ func (c *Cmd) Config(fn func(c *Cmd)) *Cmd {
281274 return c
282275}
283276
277+ // QuickRun parse OS flags and run command, will auto handle error
278+ func (c * Cmd ) QuickRun () { c .MustParse (nil ) }
279+
280+ // MustRun parse flags and run command. alias of MustParse()
281+ func (c * Cmd ) MustRun (args []string ) { c .MustParse (args ) }
282+
283+ // MustParse parse flags and run command, will auto handle error
284+ func (c * Cmd ) MustParse (args []string ) {
285+ if err := c .Parse (args ); err != nil {
286+ ccolor .Redln ("ERROR:" , err )
287+ }
288+ }
289+
290+ // Parse flags and run command func
291+ //
292+ // If args is nil, will parse os.Args
293+ func (c * Cmd ) Parse (args []string ) error {
294+ // fix: cmd.xxRun not exec Cmd.Func
295+ c .init ()
296+ return c .CFlags .Parse (args )
297+ }
298+
299+ func (c * Cmd ) init () {
300+ // attach handle func
301+ if c .Func != nil {
302+ // fix: init c.CFlags on not exist
303+ if c .CFlags == nil {
304+ c .CFlags = NewEmpty (func (cf * CFlags ) {
305+ cf .Desc = c .Desc
306+ cf .FlagSet = flag .NewFlagSet (c .Name , flag .ContinueOnError )
307+ })
308+ }
309+
310+ c .CFlags .Func = func (_ * CFlags ) error {
311+ return c .Func (c )
312+ }
313+ }
314+ }
315+
284316func (c * Cmd ) getDesc () string {
285317 if c .CFlags .Desc != "" {
286318 return c .CFlags .Desc
0 commit comments