
Rust 的核心优势在于它独特的所有权系统,近年来在开发者社区中获得了极高的关注度。它避免了传统 C/C++ 开发中常见的空指针、悬垂指针、数据竞争等问题。同时,Rust 的性能与 C++ 相当,本教程将从最基础的环境搭建开始,通过大量可直接运行的代码示例,帮助你快速入门 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"
创建一个文件 hello.rs:
fn main() { println!("Hello, Rust!"); }
编译并运行:
rustc hello.rs ./hello # Windows 上是 hello.exe
输出:

null
解释:
cargo new my_project cd my_project
这会生成如下结构:
my_project/ ├── Cargo.toml # 项目配置文件 └── src/ └── main.rs # 源代码
[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 new <项目名> # 创建新项目 cargo build # 编译项目(debug 模式) cargo build --release # 编译项目(release 模式,优化) cargo run # 编译并运行 cargo check # 快速检查代码是否能编译(不生成可执行文件) cargo test # 运行测试 cargo doc --open # 生成并打开文档
创建 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 的基础语法。
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
测试首页(浏览器访问):
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)
方案一:使用 cargo check 快速检查
cargo check # 只检查语法,不生成可执行文件
方案二:启用增量编译(默认已开启)
检查 Cargo.toml 中是否有:
[profile.dev] incremental = true
方案三:使用 sccache 缓存编译结果
cargo install sccache export RUSTC_WRAPPER=sccache
使用国内镜像源(前面已介绍),或者临时使用代理:
# Linux/macOS export https_proxy=http://127.0.0.1:7890 # Windows (PowerShell) $env:https_proxy="http://127.0.0.1:7890"
使用 println! 调试(最简单):
fn main() { let x = 5; println!("x = {:?}", x); // {:?} 用于调试输出 }
使用 dbg! 宏:
fn main() { let x = 5; dbg!(x); // 打印变量及其值,并返回所有权 }
使用 VSCode + rust-analyzer:
模块化示例:
项目结构:
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 删除。