首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从零开始学 Rust:环境搭建、基础语法到实战项目全流程

从零开始学 Rust:环境搭建、基础语法到实战项目全流程

原创
作者头像
是Dream呀
发布2025-12-04 11:37:48
发布2025-12-04 11:37:48
4720
举报

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

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

想要去安装Rust,首先直接去到官网下载 rustup-init.exe:

null

因为我自己的电脑是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

输出:

null

解释:

  • 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,输出:

null

数据类型

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); }

运行输出:

null

函数

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); }

运行输出:

null

控制流

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); } }

运行输出:

null

文档注释支持 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 之旅吧!记住,每个代码示例都可以直接运行,遇到问题就动手试试,实践是最好的老师。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 环境搭建:5分钟完成 Rust 安装
    • 配置国内镜像(可选,加速下载)
  • 2. Hello World:第一个 Rust 程序
  • 3. Cargo 工具链:Rust 的项目管理神器
    • 创建新项目
    • 查看 Cargo.toml
    • 运行项目
    • 常用 Cargo 命令
  • 4. 基础语法速通:变量、函数、控制流
    • 变量与可变性
    • 数据类型
    • 函数
    • 控制流
  • 5. 实战项目:构建一个简单的 Web API
    • 创建项目
    • 添加依赖
    • 编写代码
    • 运行服务器
    • 测试 API
  • 6. 常见问题解答
    • Q1: 编译速度慢怎么办?
    • Q2: 依赖下载失败?
    • Q3: 如何调试程序?
    • Q4: 如何组织大型项目?
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档