标志:必须项
Required Flag
必须项
一个必须的(Required)标志,要求终端用户必须在命令行中显式地给出参数值,否则 app 将会拒绝进一步执行。
cmdr 在分析命令行参数的过程中追踪每一标志的命中次数,所以 Required 标志的内部校验算法等价于检查该标志的命中次数是否大于等于 1,是的话则通过,反之则抛出必须项未满足的 exception。
定义一个必须项
.Required() 可以做到。
package main
import (
"context"
"fmt"
"os"
"gopkg.in/hedzr/errors.v3"
"github.com/hedzr/cmdr/v2"
"github.com/hedzr/cmdr/v2/cli"
"github.com/hedzr/cmdr/v2/examples/common"
"github.com/hedzr/is/term/color"
logz "github.com/hedzr/logg/slog"
)
const (
appName = "required"
desc = `a sample to show u what error raised by a missed required flag.`
version = cmdr.Version
author = `The Example Authors`
)
func main() {
app := cmdr.Create(appName, version, author, desc).
With(func(app cli.App) {
app.OnAction(func(ctx context.Context, cmd cli.Cmd, args []string) (err error) {
msg := cmd.Store().MustString("required")
println(`Hello, World.`, msg)
return
})
}).
WithBuilders(common.AddRequiredFlag).
WithAdders().
Build()
ctx := context.Background()
if err := app.Run(ctx); err != nil {
if errors.Is(err, cli.ErrRequiredFlag) {
fmt.Printf(color.StripLeftTabsC(`
The <b>REQUIRED</b> Flag not present:
<font color="red">%s</red>
`),
err)
os.Exit(1)
}
logz.ErrorContext(ctx, "Application Error:", "err", err) // stacktrace if in debug mode/build
os.Exit(app.SuggestRetCode())
} else if rc := app.SuggestRetCode(); rc != 0 {
os.Exit(rc)
}
}package examples
import (
"github.com/hedzr/cmdr/v2/cli"
)
// AddRequiredFlag _
//
// Sample code,
//
// app.RootBuilder(common.AddRequiredFlag)
//
// Or,
//
// app := cmdr.Create(appName, version, author, desc).
// WithBuilders(common.AddRequiredFlag).
// Build()
// app.Run(context.TODO())
func AddRequiredFlag(c cli.CommandBuilder) { //nolint:revive
c.Flg("required", "r").
Default("").
Required(true).
Description("the required text string wanted.", "").
Group("Test").
Build()
}运行时
一个运行时未能满足要求的必须项标志的反馈如同这样:
$ go run ./examples/required/
The REQUIRED Flag not present:
Flag "Flg{'.required'}" is REQUIRED | cmd=Cmd{''}
$
$ go run ./examples/required/ -r xyz
Hello, World. xyz额外的话题
What is Next?
How is this guide?
最后更新于