Rust CLI 工具与序列化(clap + Serde)
目录
学 Rust,迟早要写命令行工具。clap 负责解析参数,Serde 负责数据序列化——这两样几乎出现在每个真实项目里。
clap:解析命令行参数
Cargo.toml:
[dependencies]
clap = { version = "4", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"用 derive 宏定义参数,写起来像普通结构体:
use clap::Parser;
#[derive(Parser)]
#[command(name = "greet", about = "一个问候程序")]
struct Args {
/// 要问候的名字
name: String,
/// 重复次数
#[arg(short, long, default_value_t = 1)]
count: u32,
}
fn main() {
let args = Args::parse();
for _ in 0..args.count {
println!("你好, {}!", args.name);
}
}运行:cargo run -- 小明 -c 3。-c/--count 是可选参数,默认 1。
Serde:JSON 读写
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Config { host: String, port: u16 }
fn main() {
let c = Config { host: "localhost".into(), port: 8080 };
let json = serde_json::to_string(&c).unwrap(); // 序列化
println!("{}", json);
let back: Config = serde_json::from_str(&json).unwrap(); // 反序列化
println!("{:?}", back);
}小结
- clap 的
derive模式:定义结构体即定义 CLI 接口,自动生成--help。 - Serde 一套 derive 同时支持 JSON / TOML / YAML 等多种格式。
- 两者组合,能快速做出专业、健壮的命令行应用。
🎉 到这里,你已走完 Rust 从入门到框架实战的完整路线。接下来就是多写、多 cargo run,把所有权和 async 变成肌肉记忆。
⬅️ 回到 学习导航 README