Rust 的核心优势在于它独特的所有权系统,近年来在开发者社区中获得了极高的关注度。它避免了传统 C/C++ 开发中常见的空指针、悬垂指针、数据竞争等问题。同时,Rust 的性能与 C++ 相当,本教程将从最基础的环境搭建开始,通过大量可直接运行的代码示例,帮助你快速入门 Rust 开发。

1. 环境搭建:5分钟完成 Rust 安装

想要去安装Rust,首先直接去到官网https://rustup.rs/ 下载 rustup-init.exe
在这里插入图片描述

因为我自己的电脑是MAC,需要打开终端,执行:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,重启终端或执行:

source $HOME/.cargo/env

验证安装:

rustc --version
cargo --version

配置国内镜像(可选,加速下载)

配置国内镜像源可以显著提升下载速度,从几 KB/s 提升到几 MB/s。编辑 ~/.cargo/config 文件(Windows 在 %USERPROFILE%\.cargo\config),添加:

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"

2. Hello World:第一个 Rust 程序

创建一个文件 hello.rs

fn main() {
    println!("Hello, Rust!");
}

编译并运行:

rustc hello.rs
./hello       # Windows 上是 hello.exe

输出:
在这里插入图片描述

解释:

  • fn main() 是程序入口
  • println! 是一个宏(注意感叹号),用于打印并换行
  • Rust 不需要分号结尾(但习惯上会加)

3. Cargo 工具链:Rust 的项目管理神器

创建新项目

cargo new my_project
cd my_project

这会生成如下结构:

my_project/
├── Cargo.toml      # 项目配置文件
└── src/
    └── main.rs     # 源代码

查看 Cargo.toml

[package]
name = "my_project"
version = "0.1.0"
edition = "2021"

[dependencies]
# 这里添加依赖包

[package] 部分:定义包的元数据

name:项目名称,也是编译后可执行文件的名称。必须由字母、数字、下划线、连字符组成,不能包含空格
version:版本号,遵循语义化版本规范(SemVer)。格式是 主版本.次版本.补丁版本
edition:Rust 版本。Rust 每三年发布一个 edition,包含一些语言层面的变化。目前有 2015、2018、2021 三个 edition,推荐使用最新的 2021

[dependencies] 部分:声明项目依赖的外部库(crate)。目前是空的,我们马上会添加一些依赖。

运行项目

cargo run

输出:

   Compiling my_project v0.1.0
    Finished dev [unoptimized + debuginfo] target(s) in 0.50s
     Running `target/debug/my_project`
Hello, world!

常用 Cargo 命令

cargo new <项目名>      # 创建新项目
cargo build            # 编译项目(debug 模式)
cargo build --release  # 编译项目(release 模式,优化)
cargo run              # 编译并运行
cargo check            # 快速检查代码是否能编译(不生成可执行文件)
cargo test             # 运行测试
cargo doc --open       # 生成并打开文档

4. 基础语法速通:变量、函数、控制流

变量与可变性

创建 src/main.rs

fn main() {
    // 默认不可变
    let x = 5;
    println!("x = {}", x);
    
    // 需要加 mut 才能修改
    let mut y = 10;
    println!("y = {}", y);
    y = 20;
    println!("y changed to {}", y);
    
    // 常量必须标注类型
    const MAX_POINTS: u32 = 100_000;
    println!("MAX_POINTS = {}", MAX_POINTS);
}

运行 cargo run,输出:
在这里插入图片描述

数据类型

fn main() {
    // 整数类型
    let a: i32 = 42;           // 有符号 32 位
    let b: u64 = 100;          // 无符号 64 位
    
    // 浮点数
    let c: f64 = 3.14;
    
    // 布尔值
    let is_rust_fun: bool = true;
    
    // 字符(4字节,支持 Unicode)
    let emoji: char = '😀';
    
    // 字符串
    let s: &str = "Hello";      // 字符串切片(不可变)
    let s2: String = String::from("World");  // 可增长字符串
    
    println!("{} {} {} {} {} {}", a, b, c, is_rust_fun, emoji, s);
}

运行输出:
在这里插入图片描述

函数

fn main() {
    let result = add(5, 3);
    println!("5 + 3 = {}", result);
    
    greet("Alice");
}

// 函数参数必须指定类型
fn add(x: i32, y: i32) -> i32 {
    x + y  // 最后一行不加分号表示返回值
}

fn greet(name: &str) {
    println!("Hello, {}!", name);
}

运行输出:
在这里插入图片描述

控制流

fn main() {
    // if 表达式
    let number = 6;
    if number % 2 == 0 {
        println!("{} is even", number);
    } else {
        println!("{} is odd", number);
    }
    
    // if 可以作为表达式
    let result = if number > 5 { "big" } else { "small" };
    println!("Number is {}", result);
    
    // loop 循环
    let mut count = 0;
    loop {
        count += 1;
        if count == 3 {
            break;
        }
        println!("count = {}", count);
    }
    
    // while 循环
    let mut n = 3;
    while n > 0 {
        println!("{}!", n);
        n -= 1;
    }
    
    // for 循环
    for i in 1..4 {  // 1, 2, 3(不包含4)
        println!("i = {}", i);
    }
    
    // 遍历数组
    let arr = [10, 20, 30];
    for element in arr.iter() {
        println!("element = {}", element);
    }
}

运行输出:
在这里插入图片描述
文档注释支持 Markdown 语法,运行 cargo doc --open 可以生成漂亮的 HTML 文档。那我们现在已经掌握了 Rust 的基础语法。

5. 实战项目:构建一个简单的 Web API

创建项目

cargo new web_server
cd web_server

添加依赖

编辑 Cargo.toml,添加:

[dependencies]
actix-web = "4"
serde = { version = "1.0", features = ["derive"] }

编写代码

替换 src/main.rs

use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};

// 定义数据结构
#[derive(Serialize, Deserialize)]
struct User {
    name: String,
    age: u32,
}

// GET 请求:返回首页
#[get("/")]
async fn index() -> impl Responder {
    HttpResponse::Ok().body("Welcome to Rust Web Server!")
}

// GET 请求:返回用户信息
#[get("/user/{id}")]
async fn get_user(id: web::Path<u32>) -> impl Responder {
    let user = User {
        name: format!("User {}", id),
        age: 25,
    };
    HttpResponse::Ok().json(user)
}

// POST 请求:接收 JSON 数据
#[post("/user")]
async fn create_user(user: web::Json<User>) -> impl Responder {
    println!("Received user: {} (age: {})", user.name, user.age);
    HttpResponse::Created().json(user.0)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    println!("Server running at http://127.0.0.1:8080");
    
    HttpServer::new(|| {
        App::new()
            .service(index)
            .service(get_user)
            .service(create_user)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

运行服务器

cargo run

看到输出:

Server running at http://127.0.0.1:8080

测试 API

测试首页(浏览器访问):

http://127.0.0.1:8080/

返回:

Welcome to Rust Web Server!

测试获取用户(浏览器或 curl):

curl http://127.0.0.1:8080/user/123

返回:

{"name":"User 123","age":25}

测试创建用户(使用 curl):

curl -X POST http://127.0.0.1:8080/user \
  -H "Content-Type: application/json" \
  -d '{"name":"Bob","age":28}'

返回:

{"name":"Bob","age":28}

服务器终端会打印:

Received user: Bob (age: 28)

6. 常见问题解答

Q1: 编译速度慢怎么办?

方案一:使用 cargo check 快速检查

cargo check  # 只检查语法,不生成可执行文件

方案二:启用增量编译(默认已开启)

检查 Cargo.toml 中是否有:

[profile.dev]
incremental = true

方案三:使用 sccache 缓存编译结果

cargo install sccache
export RUSTC_WRAPPER=sccache

Q2: 依赖下载失败?

使用国内镜像源(前面已介绍),或者临时使用代理:

# Linux/macOS
export https_proxy=http://127.0.0.1:7890

# Windows (PowerShell)
$env:https_proxy="http://127.0.0.1:7890"

Q3: 如何调试程序?

使用 println! 调试(最简单):

fn main() {
    let x = 5;
    println!("x = {:?}", x);  // {:?} 用于调试输出
}

使用 dbg! 宏

fn main() {
    let x = 5;
    dbg!(x);  // 打印变量及其值,并返回所有权
}

使用 VSCode + rust-analyzer

  1. 安装 VSCode
  2. 安装 rust-analyzer 扩展
  3. 安装 CodeLLDB 扩展
  4. F5 启动调试

Q4: 如何组织大型项目?

模块化示例:

项目结构:

my_project/
├── Cargo.toml
└── src/
    ├── main.rs
    ├── lib.rs
    └── models/
        └── user.rs

src/models/user.rs

pub struct User {
    pub name: String,
    pub age: u32,
}

impl User {
    pub fn new(name: String, age: u32) -> Self {
        User { name, age }
    }
}

src/lib.rs

pub mod models;

src/main.rs

use my_project::models::user::User;

fn main() {
    let user = User::new(String::from("Alice"), 30);
    println!("User: {}", user.name);
}

总结

现在就开始你的 Rust 之旅吧!记住,每个代码示例都可以直接运行,遇到问题就动手试试,实践是最好的老师。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐