刚接触ref="/tag/2030/" style="color:#479099;font-weight:bold;">Rust的人可能会觉得标准库功能有限,写网络请求、处理JSON或者做异步任务时无从下手。其实社区里已经有不少成熟好用的第三方库,能让你少走很多弯路。
异步编程:tokio
Rust的异步生态基本绕不开tokio。它提供了运行时支持,让你能轻松写出高性能的并发程序。比如要同时发起多个HTTP请求,用tokio配合async/await语法会非常自然。
use tokio;
#[tokio::main]
async fn main() {
let handle = tokio::spawn(async {
println!("正在执行异步任务");
});
handle.await.unwrap();
}
HTTP客户端:reqwest
想从API拉数据?reqwest是首选。它的接口简洁,支持同步和异步模式,还能自动处理JSON序列化。比如获取天气信息时,几行代码就能搞定。
use reqwest;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::get("https://httpbin.org/json")
.await?
.json::<serde_json::Value>()
.await?;
println!("{:#?}", resp);
Ok(())
}
数据序列化:serde
处理JSON、YAML这类结构化数据时,serde几乎是标配。配合derive宏,可以直接把结构体和JSON字段对应起来,不用手动解析字段。
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct User {
name: String,
age: u8,
}
let data = r#"{\"name\": \"Alice\", \"age\": 30}"#;
let user: User = serde_json::from_str(data)?;
println!("{} is {} years old", user.name, user.age);
命令行工具:clap
写个本地小工具,比如批量重命名文件或分析日志,clap能让参数解析变得简单。支持自动生成帮助文档,还兼容常见的命令格式,像--help、-v这些都不用额外写。
use clap::Parser;
#[derive(Parser)]
struct Cli {
file: String,
#[arg(short, long)]
output: Option<String>,
}
let args = Cli::parse();
println!("处理文件: {}", args.file);
日志输出:log + env_logger
调试阶段需要看中间状态,log宏加上env_logger组合使用最方便。发布时可以通过环境变量控制日志级别,不影响性能。
use log;
fn main() {
env_logger::init();
log::info!("应用启动成功");
log::warn!("当前配置为调试模式");
}
文件路径处理:walkdir
遍历目录查找特定文件时,std::fs有点难用。walkdir提供流式的迭代方式,可以过滤隐藏文件、按类型筛选,写脚本时特别顺手。
use walkdir::WalkDir;
for entry in WalkDir::new(".").into_iter().filter_map(|e| e.ok()) {
if entry.path().is_file() {
println!("发现文件: {:?}", entry.path());
}
}