hzDocs
hzDocs
Articles / Postshedzr.comIntroduction

Guide

Your First CLI AppConcise Version
Step by step
Concepts
CommandCommand: Invoke programCommand: Presetting ArgsCommand: RedirectToCommand: DynCommandCommand: Aliases from ConfigCommand: Event HandlersFlagFlag: RequiredFlag: Toggle GroupFlag: Valid ArgsFlag: `Head -1` styleFlag: External EditorFlag: NegatableFlag: Leading Plus Sign `+`Flag: Event Handlers解析结果Builtin Commands & Flags帮助子系统Shared App辨析Package level functionsWithOptsBackstage
Howto ...
Auto-close the ClosersRead config into structUsing is DetectorsUsing Store

References

What's New
Packages

Others

Examples
Blueprint
产品发布
产品发布之前
Concepts

辨析

the differences between ...

辨析

cmdr.App() and cmd.App()

自 cmdr v2.1.11 起,我们支持声明多个 app 实例,彼此互不相干。

参见 Shared App

所以,从 OnAction Handler 中通过 cmd 来取得 app 对象就是唯一的途径。

除此而外,在大多数 apps 中,cmd.App() 取得的 app 实例和 cmdr.App() 取得的是完全一致的。

cmd.App() 与 cmd.Root().App()

在多数情况下,两者是相同的。

但对于 DynCommand 来说,cmd.App() 有可能没有正确值,这取决于 litecmd.go 中如何实现一个相似的 Cmd 对象结构。

在当前的 liteCmdS 实现中,没有维持正确的 root 信息,所以它的 App() 接口可能无法正确返回对象。

在这种情况下,cmd.Root().App() 就是取得 app 实例的正确方式,而 cmd.App() 可能并未得到正确值。

其原因在于,cmd.Root() 获得的 RootCommand 是 cmdr 内置对象,它完全遵守了协议,对 Root,Owner,App 等关联对象的连接是被 cmdr 所正确约束的。

额外的话题

With Options

Package Level Functions

What is Next?

How is this guide?

Last updated on

Shared App

multiple app instances

Package level functions

Package Level Functions...

On this page

辨析
cmdr.App() and cmd.App()
cmd.App() 与 cmd.Root().App()
额外的话题