有人问我Rust怎么上手,干脆写一篇,省得每次都重复回答。

安装

# 安装 Rust
curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
rustc --version
cargo --version

初始化项目

// 异步 HTTP 服务 (Axum)
use axum::{routing::get, Router, Json};
use serde::Serialize;
use std::net::SocketAddr;

#[derive(Serialize)]
struct HealthResponse {
    status: String,
    uptime_secs: u64,
}

async fn health() -> Json<HealthResponse> {
    Json(HealthResponse {
        status: "ok".into(),
        uptime_secs: 0, // 实际项目从启动时间算
    })
}

#[tokio::main]
async fn main() {
    let app = Router::new().route("/health", get(health));

    let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
    println!("Listening on {}", addr);

    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

遇到的问题

  • Option 和 Result 别混用,Option 表示可能没有,Result 表示可能出错
  • unwrap() 在原型阶段用,上线前全换成 ? 或 match
  • cargo clippy 比 cargo check 严格,养成习惯能少踩坑
  • String 和 &str 别搞混:String 是拥有的,&str 是借用的。函数参数优先用 &str

跑起来之后

用 Rust 写了个日志解析服务,每天处理 50GB 日志,内存稳定在 30MB,CPU 才用 15%。之前用 Python 写的同样的功能,内存 2GB+,CPU 跑满。Rust 的零成本抽象不是吹的。

常见问题

借用检查器老报错怎么办?

先理解所有权:一个值同一时间只能有一个所有者。报错了就想想是不是同时有两个变量想拥有同一个数据。用 clone() 快速解决,然后再优化掉不必要的克隆。

Rust 学习曲线真的很陡吗?

说实话,前两周确实痛苦,尤其是生命周期。但扛过去之后就好了。建议从简单项目开始,别上来就写复杂系统。Rust by Example 网站按章节过一遍比啃书快。

async Rust 怎么入门?

先搞懂同步 Rust,async 放后面学。tokio 是事实标准 runtime,跟着官方教程走。async/.await 本身不难,难的是 Send 约束和 Pin,这些用到再深究。

先写到这,后面有新发现再更新。觉得有用的话收藏一下。