hzDocs
hzDocs
文章 / 文档hedzr.com首页

cmdr series

介绍 cmdr

Guide

你的首个 CLI app更适合工程实践的版本
循序渐进
基本概念
命令命令:执行外部程序命令:预设参数命令:重定向命令:动态命令清单命令:在配置文件中定义别名清单命令:事件响应函数标志标志:必须项标志:可翻转组标志:枚举值标志:`Head -1` 风格标志:调用外部工具获得输入标志:自动否定标志:加号 `+` 前缀标志:事件响应函数解析结果内建命令和标志帮助子系统可共享共存的 app 实例辨析顶级函数WithOptsBackstage
如何……
Auto-close the ClosersRead config into structUsing is DetectorsUsing Store

References

What's New
Packages

Others

Examples
Blueprint
产品发布
产品发布之前
介绍 cmdr-cxx

Guide

cmdr supports

Intro

Guide

More features

References

Others

evendeep(-go)

Guide

Usagesdeepcopydeepdiffdeepequal
logg/slog(-go)

Guide

Guide

others

Components
trie-cxx

Guide

Guide

links

On Github

标志:必须项

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

额外的话题

Required

Toggle Group

Valid Args

Head Like

External Tool

Plus Sign

Event Handlers

What is Next?

Components

Components

On Github

How is this guide?

最后更新于

目录

必须项
定义一个必须项
运行时
额外的话题