目录

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