func (c *Command) Runnable() bool {
	return c.Func != nil
}
Runnable reports whether the command can be run; otherwise
it is a documentation pseudo-command such as import path.
package gcli
import (
	"errors"
	"flag"
	"fmt"
	"os"
	"strings"
	"text/template"
	"github.com/gookit/color"
	"github.com/gookit/gcli/v3/helper"
	"github.com/gookit/goutil/structs"
	"github.com/gookit/goutil/strutil"
)
type Runner interface {
	Run(c *Command, args []string) error
}
type RunnerFunc func(c *Command, args []string) error
func (f RunnerFunc) Run(c *Command, args []string) error {
	return f(c, args)
}
const maxFunc = 64
type HandlersChain []RunnerFunc
func (c HandlersChain) Last() RunnerFunc {
	length := len(c)
	if length > 0 {
		return c[length-1]
	}
	return nil
}
type Command struct {
	core
	commandBase
	Flags
	Arguments
	Name string
	Desc string
	Aliases []string
	Category string
	Config func(c *Command)
	Hidden bool
	runErr error
	middleIdx int8
	middles HandlersChain
	pathNames []string
	parent *Command
	Subs []*Command
	Examples string
	Func RunnerFunc
	Help string
	HelpRender func(c *Command)
	app *App
	disabled bool
	standalone bool
	goptBounded bool
}
func NewCommand(name, desc string, fn ...func(c *Command)) *Command {
	c := &Command{
		Name: name,
		Desc: desc,
	}
	if len(fn) > 0 {
		c.Config = fn[0]
	}
	c.Arguments.SetName(name)
	return c
}
func (c *Command) Init() {
	c.initialize()
}
func (c *Command) SetFunc(fn RunnerFunc) {
	c.Func = fn
}
func (c *Command) WithFunc(fn RunnerFunc) *Command {
	c.Func = fn
	return c
}
func (c *Command) WithHidden() *Command {
	c.Hidden = true
	return c
}
func (c *Command) AttachTo(app *App) {
	app.AddCommand(c)
}
func (c *Command) Disable() {
	c.disabled = true
}
func (c *Command) Visible() bool {
	return c.Hidden == false
}
func (c *Command) IsDisabled() bool {
	return c.disabled
}