阶段四:实战(项目开发能力)

目标

将 Rust 应用到真实项目中,掌握生态与工具链,能独立开发 CLI、Web 和网络应用。


1. CLI 工具

使用 clap / structopt

rust 复制代码
use clap::Parser;

#[derive(Parser)]
struct Args {
    #[clap(short, long)]
    name: String,

    #[clap(short, long, default_value_t = 1)]
    count: u32,
}

fn main() {
    let args = Args::parse();
    for _ in 0..args.count {
        println!("Hello, {}!", args.name);
    }
}
  • cargo build --release 打包为二进制文件
  • 文件操作:
rust 复制代码
use std::fs::File;
use std::io::Write;

let mut file = File::create("output.txt").expect("创建文件失败");
file.write_all(b"Hello, Rust CLI!").expect("写入失败");

2. Web 开发

使用 Actix-web 创建 REST API

rust 复制代码
use actix_web::{get, post, web, App, HttpServer, Responder};

#[get("/")]
async fn hello() -> impl Responder {
    "Hello, world!"
}

#[post("/echo")]
async fn echo(msg: String) -> impl Responder {
    msg
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(hello).service(echo))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

JSON 序列化与反序列化

css 复制代码
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct User {
    id: u32,
    name: String,
}

let user = User { id: 1, name: "Eric".to_string() };
let json = serde_json::to_string(&user).unwrap();
let back: User = serde_json::from_str(&json).unwrap();

3. 数据库

使用 sqlx

rust 复制代码
use sqlx::postgres::PgPoolOptions;

#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {
    let pool = PgPoolOptions::new()
        .max_connections(5)
        .connect("postgres://user:password@localhost/dbname")
        .await?;

    let row: (i32,) = sqlx::query_as("SELECT 1")
        .fetch_one(&pool)
        .await?;
    println!("结果: {}", row.0);

    Ok(())
}
  • Diesel 也可用于类型安全的 ORM
  • 异步数据库操作可以使用 sqlx::query + await
  • 支持事务:
rust 复制代码
let mut tx = pool.begin().await?;
sqlx::query("INSERT INTO users (name) VALUES ($1)").bind("Eric").execute(&mut tx).await?;
tx.commit().await?;

4. 网络与异步

TCP 客户端

rust 复制代码
use tokio::net::TcpStream;
use tokio::io::{self, AsyncWriteExt};

#[tokio::main]
async fn main() -> io::Result<()> {
    let mut stream = TcpStream::connect("127.0.0.1:8080").await?;
    stream.write_all(b"Hello server!").await?;
    Ok(())
}

HTTP 请求(reqwest)

rust 复制代码
use reqwest::Error;

#[tokio::main]
async fn main() -> Result<(), Error> {
    let res = reqwest::get("https://www.rust-lang.org").await?;
    let body = res.text().await?;
    println!("{}", &body[0..100]);
    Ok(())
}

5. 测试与调试

单元测试

rust 复制代码
fn add(a: i32, b: i32) -> i32 { a + b }

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
    }
}

集成测试

  • tests/ 文件夹下创建独立测试文件
  • cargo test 自动运行

代码检查与格式化

bash 复制代码
cargo clippy   # 静态分析
cargo fmt      # 自动格式化

练习项目

  1. 命令行文件管理工具
  • 支持复制、移动、删除文件
  • 参数解析:输入源路径和目标路径
  • 输出操作日志
  1. RESTful API 服务
  • CRUD 操作(Create, Read, Update, Delete)
  • 数据库持久化(Postgres / SQLite)
  • JSON 接口返回
  1. 简易聊天室
  • TCP 或 WebSocket 实现
  • 多线程/异步处理多客户端
  • 支持发送/接收消息
相关推荐
JianZhen✓几秒前
现在在本地开发了一些代码A,又有了新需求要紧急开发代码B需要只上线代码B的代码,如何更好的处理这种情况
前端
郝学胜-神的一滴20 分钟前
Cesium绘制线:从基础到高级技巧
前端·javascript·程序人生·线性代数·算法·矩阵·图形渲染
蒙娜丽宁37 分钟前
Rust 性能优化指南:内存管理、并发调优与基准测试案例
开发语言·性能优化·rust
蒙奇D索大1 小时前
【计算机网络】408计算机网络高分指南:物理层编码与调制技术精讲
java·前端·学习·计算机网络
无盐海1 小时前
CSRF漏洞攻击(跨站请求伪造攻击)
前端·csrf
慧一居士1 小时前
CSS3 全部功能点介绍,使用场景,对应功能点完整使用示例
前端
烛阴1 小时前
深入Lua包(Package)与依赖管理
前端·lua
IT_陈寒2 小时前
5个Vue3性能优化技巧,让你的应用提速50% 🚀(附实测对比)
前端·人工智能·后端
god002 小时前
chromium项目中添加源文件(BUILD.gn项目中添加源文件)
java·服务器·前端
快乐非自愿2 小时前
Vue 缓存之坑,变量赋值方式和响应式数据
前端·vue.js·缓存