从结构与 Tag 构建命令体系
BuildFrom Example
构造根命令以及整个命令体系可以采用如下的方案:
- traditional stream calls (
app.Cmd("verbose", "v").Action(onVerbose)
) - concise modes by
[Create]
and cmd/xxcmd.go - use
[Create.BuildFrom]
to build cmdsys from a struct value via[App.FromStruct]
, see example #example_Create_buildFromStructValue
Getting started from New or Create function.
从结构定义中提取信息并构建 RootCommand 及其子命令系统是从 v2.1.36 开始引入的。
这个特性类似于 kong 那样的构造风格,但较为简陋。不过它的能力并未受到限制,相反,你仍然可以通过 With()
/Action
方法来进一步定制她。
一般地,可以使用如下的 Struct Tag 名字:
title
,name
:指定 Long titleshorts
,short
:逗号分隔的 Short Titles,其中第一个 title 被用于 Cmd/Flag.Short 字段,其它的被用于 ExtraShorts 字段aliases
,alias
:指定 Long Alias titlesdesc
,help
:指定 Desc 字段,用于帮助屏显示required
:仅对 Flag 有效,指定 Flag.Required 属性- 其它名字被忽略,未来可能就此在兼容性上做更多工作
运行效果如下:
rm full
子命令的运行效果如下:
使用 With 进行定制
在测试代码中我们也给出了增强的例子。
通过 Create().BuildFrom(R{})
可以就下例构建出新的菜单结构。
通过为 struct A 增加 With()
方法,你可以对其进一步进行定制,如果传统方案所做的那样。
增加 Action
在上一个例子中,可以为 E,F 子命令增加 OnAction,
如此一来,子命令被执行时,Action 方法就将获得执行权。
你也可以为其他层次的子命令添加 Action,它们也能工作,但不被推荐,因为最终用户可能期待中间层次的命令自动显示帮助屏而不是执行某种行为。
指定默认值
在构建命令系统时,可以通过给结构变量指定初值的方式来给出 Flag 的默认值,
未来的计划
我们将来未来的几个版本迭代中,进一步地将 struct value 风格与 blueprint app 骨架结合起来,让你更简便快速地构建大型的命令体系结构,同时也不必失去精细控制能力。
同时,传统的构造方案并不受到影响。
:end:
How is this guide?
Edit on GitHub
Last updated on