辨析
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