Day 3:CLI 參數解析(clap)
學習目標
- 用 clap 定義子指令(subcommand)
- 解析參數與選項
- 建立 CLI 骨架
今日重點
clap 子指令
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "todo", about = "CLI 任務管理工具")]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
/// 新增任務
Add {
/// 任務內容
title: String,
},
/// 列出所有任務
List,
/// 標記任務完成
Done { id: u64 },
/// 刪除任務
Remove { id: u64 },
}
fn main() {
let cli = Cli::parse(); // 從命令列解析
match cli.command {
Command::Add { title } => println!("Add: {}", title),
Command::List => println!("List all"),
Command::Done { id } => println!("Done: {}", id),
Command::Remove { id } => println!("Remove: {}", id),
}
}
使用
cargo run -- add "學習 Rust"
cargo run -- list
cargo run -- done 1
cargo run -- remove 2
cargo run -- --help # clap 自動產生說明
練習
- 建立上述 CLI 骨架並測試各指令。
- 執行
cargo run -- add abc 確認能取出 title。
- 加一個選項:
list --all(預設只顯示未完)。
自我檢查
深入連結