主要观点:Go 适合构建命令行应用,如世界上第一个版本控制的 SQL 数据库 Dolt,其自带命令行解析器但可选择其他工具。同时介绍了用于构建交互式 shell 的最佳工具[abiosoft/ishell],包括预定义命令和自由形式模式,还讲解了如何启动不同模式的 shell、中断执行、添加 shell 历史和 tab 补全等功能。
关键信息:
- 可选择的工具:[spf13/cobra]可从简单文本命令格式生成代码及生成 shell 补全;[charmbracelet/gum]是生成时尚命令行提示符的工具;[alecthomas/kingpin]是构建命令行应用的库。
- [abiosoft/ishell]的两种模式:预定义命令模式(每个命令有不同处理程序)和自由形式模式(类似 REPL,读取输入直到分隔符)。
- 启动 shell 的方法:预定义命令模式需选择配置选项创建 shell 并添加命令后运行;自由形式模式需创建特定配置的 shell 并设置处理函数运行。
- 中断执行的方式:安装 EOF 处理程序(用户输入结束或发送 EOF 字符)、中断处理程序(处理 SIGINT 信号)、设置退出关键字(自由形式 shell 遇到退出关键字自动退出)。
- 添加 shell 历史和 tab 补全:历史支持通过提供历史文件路径并在每个命令后更新实现,tab 补全可实现自定义补全功能。
重要细节: - Dolt SQL shell 的示例展示了其欢迎消息、提示符、退出方式及颜色使用等。
- 对于自由形式模式的 SQL shell 处理,通过创建新上下文处理用户中断查询。
- 自定义 tab 补全功能根据输入判断是 SQL 关键字还是模式元素进行补全。
结论:[abiosoft/ishell]是 Go 中构建交互式 shell 的优秀工具,虽不再活跃开发但稳定可用,有问题可在 Discord 上交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。