Go交互式命令行框架grumble
Go的交互式(interactive)命令行工具(CLI)生态并不如我原先所想的那么丰富。
现在唯一流行的是 c-bata/go-prompt 这个库,它做到了类 python prompt toolkits 的体验,也就是能够很美观地自动补全。
但由于它需求覆盖面非常广,对命令行的语法没有严格要求,可以是SQL,也可以是 cmd --flag arg 这种格式,甚至可以是汇编 (asm-cli) ,所以它定位偏底层。
一个命令行工具基于 go-prompt 仍要再堆不少代码,才可在真实世界使用。所以 go-prompt 可谓一个专精的库,而非完整的框架。
现在我手动安利一个新库叫 desertbit/grumble ,它的命令语法是
cmd subcmd1 --flag1 args[0] args[1]
这种格式。可谓是交互式命令行工具中的 spf13/cobra。
开发者如今(2020年)迭代比较积极,社区响应也不错,但其开发完成度还不高,星星数也不多,适合有时间的同学去参与。
像 grumble 这样的库可之称为 framework,是因为它不需东拼西凑就可以满足绝大多数的需求。但上面也是因此感慨,这样的 framework 市场却不大,或许是因为 interactive CLI 本身需求,大多是语法特别特别复杂的,否则直接 spf13/cobra , urfave/cli 就完事了。
从产品上讲,interactive CLI 的展示效果终究不如 webui 直观,无法展示特别复杂的内容。所以一个产品诞生,不如只开发 webui 就好,并且只提供和维护 non-interactive CLI。
Pegasus 基于 grumble 开发了 admin-cli 命令行管理工具。后续我们应该还是会着重考虑 webui。
admin-cli 的交互体验是这样的:
因为用纯golang实现,不依赖cgo,这个命令行工具可以实现不错的跨平台能力,能在arm平台和windows上使用。
admin-cli目前已经开放beta版本,Pegasus的开发者们可以来下载试用。