hzDocs

辨析

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 所正确约束的。

额外的话题

How is this guide?

Edit on GitHub

Last updated on

On this page