1。Clapclap在编写一些CLI工具时非常有用。它用于ripgrep和Rust自己的Cargo。Clap编译后非常小,加载启动非常快。clap会帮你处理命令行参数,可以自定义友好提示,支持功能操作,非常方便。https://clap.rsuseclap::App;fnmain(){App::new("myapp").version("1.0").about("Doesgreatthings!").author("KevinK.").get_matches();}$myapp--helpmyapp1.0KevinK.Doesgreatthings!USAGE:myapp[FLAGS]FLAGS:-h,--help打印此消息-V,--version打印版本信息2,serde和与calp一样,serde是一个功能丰富且性能非常好的通用序列化库。生产中不建议自己造轮子读写文件。你可以先定义你想要的数据类型,然后使用serde库加载和读取文件。另外,serde库可以帮你完成YAML和JSON的序列化和反序列化,非常方便。https://serde.rsuseserde::{Serialize,Deserialize};#[derive(Serialize,Deserialize,Debug)]structPoint{x:i32,y:i32,}fnmain(){letpoint=Point{x:1,y:2};//将Point转换为JSON字符串。让序列化=serde_json::to_string(&point).unwrap();//打印serialized={"x":1,"y":2}println!("serialized={}",serialized);//将JSON字符串转换回一个点。让反序列化:Point=serde_json::from_str(&serialized).unwrap();//Printsdeserialized=Point{x:1,y:2}println!("deserialized={:?}",deserialized);}3.reqwestreqwest和request一样,是http协议的客户端库,帮助大多数人做一些希望HTTP客户端为他们做很多事情,发出请求、超时处理、多种格式支持、异步同步请求、代理等。https://docs.rs/reqwest/0.10.8/reqwest//这将发布一个`{"lang":"rust","body":"json"}`letmutmap=HashMap::new();map.insert("lang","rust");map.insert("body","json");letclient=reqwest::Client::new();letres=client.post("http://httpbin.org/post").json(&map).send().await?;4.rayonrayon是一个可以并行提供数据的库,它知道如何合理的拆分数据块,合理的使用cpu。例如,当你想在列表上并行使用map时可以使用它。这很有趣,在编写一些CLI工具时很有用,并不是所有的编程语言都可以在命令行上并行运行一些数据。https://github.com/rayon-rs/rayonuserayon::prelude::*;fnsum_of_squares(input:&[i32])->i32{input.par_iter()//<--改变它!.map(|&i|i*i).sum()}5、slog和logslog是Rust中一个非常完整的日志库。很多知名库也将其作为日志库使用,比如term、json等。但是日志库正在成为Rust标准库的一部分,你可以考虑切换到日志库。https://github.com/slog-rs/slogletdecorator=slog_term::PlainSyncDecorator::new(std::io::stdout());让drain=slog_term::FullFormat::new(decorator).build().fuse();让root_log=slog::Logger::root(drain,o!("version"=>"0.5"));让server_log=root_log.new(o!("host"=>"localhost","port"=>"8080"));让peer1_log=server_log.new(o!("peer_addr"=>"8.8.8.8","port"=>"18230"));让peer2_log=server_log.new(o!("peer_addr"=>"82.9.9.9","port"=>"42381"));信息!(服务器日志,“开始”);信息!(服务器日志,“监听”);调试!(peer2_log,“已连接”);debug!(peer2_log,"收到消息";"长度"=>2);调试!(peer1_log,“已连接”);debug!(peer2_log,"响应已发送";"长度"=>8);调试!(peer2_log,“断开连接”);debug!(peer1_log,"收到消息";"长度"=>2);debug!(peer1_log,"响应已发送";"长度"=>8);调试!(peer1_log,“光盘onnected");info!(server_log,"exit");6.itertools在写代码的时候,给List添加N个以上的运算符是很麻烦的,好在itertools可以帮我们处理,很方便.例如,如果你想Alistissortedaftermapandgroupedaftersorting.你怎么做?https://github.com/rust-itertools/itertools//使用Itertools::fold_results来创建结果解析letirises=DATA.lines().map(str::parse).fold_ok(Vec::new(),|mutv,iris:Iris|{v.push(iris);v});letmutirises=matchirises{Err(e)=>{println!("错误解析:{:?}",e);std::process::exit(1);}Ok(data)=>data,};//对它们进行排序并将它们分组irises.sort_by(|a,b|Ord::cmp(&a.name,&b.name));
