关于cli:文盘Rust起手式CLI程序-京东云技术团队
技术的学习从不会到会的过程是最有意思的,也是领会最多的。一旦纯熟了,常识变成了常识,可能就失去了记录学习过程的最佳时机。 在我看来学习一门计算机语言和学习人类语言有很多共通之处。咱们学习人类语言是从单个的词开始,而后是简略句子,通过一直的与别人交互练习把握语法和语言习惯。当纯熟到肯定水平就能够表达思想。计算的语言也差不多,相熟关键词,根本逻辑,规范库,写利用。只是沟通的对象是机器而已。 既然是学就不能在开始搞的太难。学习原本就是个艰辛的差事。上来就干特地简单的事件往往会保持不上来。天下难事必做于易,从简入繁,从易到难,方为邪道。 先聊聊最简略的CLI(Command Line Interface)程序。其实咱们每学习一门语言的 hello world 程序就是CLI,只是没那么多交互而已。 做命令行程序最繁琐的事件是解决交互。交互大体分两种。一种是咱们最相熟shell下的交互模式,每次一个命令,配合参数实现一次解决返回一组后果。这种模式解决起来比拟容易Rust也有相当优良的第三方lib (clap)。第二种是畛域交互,就像我是应用MySql或者redis的客户端程序。这种程序能够玩儿的货色就比拟多了像如何实现交互,如何来做子命令的提醒。这些货色 clap 并没有提供,须要咱们本人来实现。 interactcli-rs是我在工作过程中做的一个交互模式命令行脚手架。实现了一些罕用性能。 上面咱们来看看如何通过几个步骤疾速的实现一个性能绝对齐全的CLI程序。和做饭一样,可能疾速取得成就感的形式是找半成品间接下锅炒一盘:)。 上面咱们具体看看,如何通过interactcli-rs实现一个功能齐全的命令行程序 来点感性认识先把我的项目clone下来运行个例子 clone 我的项目 git clone https://github.com/jiashiwen/interactcli-rs.gitcd interactcli-rs命令行模式 cargo run requestsample baidu交互模式 cargo run -- -iinteract-rs> requestsample baidu运行下面的命令是通过http来申请百度 四步做个CLI首先咱们先来看看框架的目录构造 .├── examples├── log├── logs└── src ├── cmd ├── commons ├── configure ├── interact ├── logger └── requestcmd目录是咱们做本人性能时要动的次要目录,上面咱们一步一步的实现requestsample命令。 定义命令 cmd 模块用于定义命令以及相干子命令,requestsample.rs 中定义了拜访百度的命令 use clap::Command;pub fn new_requestsample_cmd() -> Command<'static> {clap::Command::new("requestsample").about("requestsample").subcommand(get_baidu_cmd())}pub fn get_baidu_cmd() -> Command<'static> {clap::Command::new("baidu").about("request www.baidu.com")}new\_requestsample\_cmd 函数定义了命令 "requestsample",get\_baidu\_cmd 函数定义了 requestsample 的子命令 baidu ...