Linux中Rust编程入门指南
在Linux中通过rustup安装Rust工具链,配置VSCode与RustAnalyzer开发环境。学习变量、数据类型、函数、控制流等基础语法。使用Cargo创建并运行第一个Rust程序,为进一步掌握所有权、并发编程等进阶内容奠定基础。
Linux下Rust编程入门指南:从环境搭建到基础实践
一、Linux下Rust环境搭建
在Linux上搞Rust开发,第一步当然是把工具链安排上。Rust官方推荐用 rustup 来管理工具链——它包含了编译器 rustc、包管理器 Cargo 等一整套东西。直接在终端跑下面这行命令就行:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
装完之后,要么重启终端,要么手动跑一下 source $HOME/.cargo/env 让环境变量生效。然后验证一下:执行 rustc --version 和 cargo --version,如果都能看到版本号,说明环境已经就绪。
1.2 配置开发工具(VS Code + Rust Analyzer)
写代码光有编译器还不够,趁手的编辑器能让效率翻倍。推荐 VS Code 加上 Rust Analyzer 插件,具体步骤很简单:
- 去 VS Code 官网下载 Linux 版本(.deb 或 .rpm 包),用包管理器安装;
- 打开 VS Code,搜索“Rust Analyzer”插件并安装;
- (可选)再装个代码格式化工具:
rustup component add rustfmt,之后写代码就能自动排版,看着舒服很多。
二、Rust基础语法学习
2.1 变量与可变性
Rust 里的变量默认是“不可变”的——这设计其实是为了防止你手滑改错数据。用 let 声明变量,如果要让它可变,得加个 mut 关键字:
let x = 5; // 不可变变量
let mut y = 10; // 可变变量
y = 20; // 合法:可变变量可以重新赋值
// x = 30; // 错误:不可变变量不能修改
常量用 const 声明,必须显式指定类型,而且值必须在编译时就确定:
const MAX_SCORE: u32 = 1000; // 常量
println!("Max score: {}", MAX_SCORE);
还有一个很实用的特性叫“遮蔽”(Shadowing):在同一作用域里,你可以重新声明同名变量,新变量会覆盖旧的。这在做类型转换或数据清洗时特别好用:
let x = 5;
let x = x + 1; // x 现在是 6
let x = x * 2; // x 现在是 12
2.2 数据类型
标量类型
- 整数:比如
i8/u8(8位有符号/无符号)、i32/u32(32位)、isize/usize(跟系统架构有关,通常用于数组索引); - 浮点数:
f32(单精度)、f64(双精度,默认就是它); - 布尔值:
bool,只有true和false; - 字符:
char,占4个字节,支持 Unicode,用单引号包裹。
复合类型
- 元组(Tuple):长度固定,元素类型可以不同。通过
.下标访问,也能解构:
let tup: (i32, f64, char) = (42, 3.14, 'a');
let (x, y, z) = tup; // 解构
println!("x={}, y={}, z={}", x, y, z);
- 数组(Array):长度固定,元素类型相同。通过索引访问,越界会在编译阶段就报错:
let arr: [i32; 3] = [1, 2, 3]; // 长度为3的i32数组
println!("First element: {}", arr[0]); // 索引从0开始
2.3 函数
用 fn 关键字定义函数,参数和返回值都要显式声明类型。注意:函数的返回值是最后一个表达式(后面不带分号),它会隐式返回:
fn greet(name: &str) { // 无返回值(返回Unit类型 `()`)
println!("Hello, {}!", name);
}
fn add(a: i32, b: i32) -> i32 { // 返回i32类型
a + b // 无分号,隐式返回
}
调用的时候很直接:greet("Alice");、let sum = add(5, 10);。
2.4 控制流
条件语句(if)
if 后面的条件不用加括号,但代码块必须用 {} 包裹。而且 if 还能当作表达式使用:
let number = 7;
if number > 5 {
println!("Greater than 5");
} else if number == 5 {
println!("Equal to 5");
} else {
println!("Less than 5");
}
// if 作为表达式
let result = if number > 0 { 10 } else { 20 };
println!("Result: {}", result);
循环
loop:无限循环,需要用break手动退出;while:条件为真时循环执行;for:遍历集合(比如数组、范围),比while更安全,不会越界。
// loop
let mut count = 0;
loop {
println!("Loop: {}", count);
count += 1;
if count >= 3 { break; }
}
// while
let mut num = 3;
while num > 0 {
println!("While: {}", num);
num -= 1;
}
// for
let arr = [10, 20, 30];
for element in arr.iter() { // 使用iter()避免所有权问题
println!("For: {}", element);
}
三、实战项目:创建第一个Rust程序
3.1 使用Cargo创建项目
Cargo 是 Rust 的包管理和构建工具,用它创建项目非常省事:
cargo new hello_rust # 创建名为hello_rust的项目
cd hello_rust # 进入项目目录
项目结构是这样的:
hello_rust/
├── Cargo.toml # 项目配置文件(依赖、元数据)
└── src/
└── main.rs # 主入口文件(默认生成了Hello World代码)
3.2 编写与运行程序
编辑 src/main.rs,把代码改成你想输出的内容,比如:
fn main() {
println!("Hello, Rust!");
}
然后直接运行:
cargo run # 编译并运行(自动生成可执行文件)
你会看到输出:
Hello, Rust!
如果想分开编译和运行,也可以:先 cargo build 生成 target/debug/hello_rust,然后再 ./target/debug/hello_rust 手动执行。
四、进阶方向建议
基础语法掌握之后,想深入的话,可以往这几个方向使劲:
- 内存安全:搞懂 Rust 的所有权(Ownership)和借用(Borrowing)机制,特别是
String和&str的区别——这几乎是 Rust 的灵魂所在; - 并发编程:用
std::thread模块写多线程,或者上tokio异步运行时,体验一下 Rust 的零成本抽象; - 网络编程:通过
std::net模块实现 TCP/UDP 服务器或客户端,写个简单的聊天程序练练手; - 生态工具:
clippy做代码检查、rustfmt做格式化、cargo test做单元测试——这些工具能帮你写出更规范、更健壮的代码。


































