长安的 Rust 入门教程长安的 Rust 入门教程
首页
基础教程
进阶内容
Rust 官网
编程指南
首页
基础教程
进阶内容
Rust 官网
编程指南
  • 基础教程

    • 📚 基础教程
    • 第1章 - 认识 Rust
    • 第2章 - 安装 Rust
    • 第3章 - Hello World
    • 第4章 - 变量与可变性
    • 第5章 - 数据类型
    • /guide/06-functions.html
    • 第7章 - 控制流
    • 第8章 - 所有权
    • 第9章 - 引用与借用
    • 第10章 - 结构体
    • 第11章 - 枚举
    • 第12章 - 模式匹配
    • 第13章 - 错误处理
    • 第14章 - 集合类型
    • 第15章 - 模块系统
  • 实战项目

    • 第16章 - 实战项目:猜数字游戏
    • 第17章 - 实战项目:待办事项 CLI
    • 第18章 - 实战项目:简单 HTTP 服务器

第3章 - Hello World

嗨,朋友!我是长安。

上一章我们把开发环境搭建好了,现在终于可以写代码了!按照编程界的传统,我们的第一个程序当然是 "Hello, World!"。

别小看这个简单的程序,它会帮你理解 Rust 项目的基本结构。

🚀 创建第一个项目

打开终端,输入以下命令:

cargo new hello_world
cd hello_world

让我们看看 Cargo 为我们创建了什么:

hello_world/
├── Cargo.toml          # 项目配置文件
├── .gitignore          # Git 忽略文件
└── src/
    └── main.rs         # 主程序文件

长安说

cargo new 命令会自动帮你创建一个完整的 Rust 项目结构,甚至还初始化了 Git 仓库!是不是很贴心?

📝 理解 Cargo.toml

打开 Cargo.toml 文件,你会看到:

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

[dependencies]

让我解释一下每一部分:

字段说明
name项目名称
version项目版本号
editionRust 版本(2021 是最新的稳定版)
dependencies项目依赖(目前是空的,后面会用到)

什么是 Edition?

Rust 每隔几年会发布一个新的 Edition(版次),引入一些向后兼容的改进。目前最新的是 2021 Edition。你不需要担心这个,使用最新版本就好。

📖 理解 main.rs

打开 src/main.rs 文件,你会看到:

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

就这么简单!让我们逐行解读:

第1行:fn main() {

fn main() {
  • fn 是 function(函数)的缩写,用来定义函数
  • main 是函数名,这是一个特殊的函数,是程序的入口
  • () 表示这个函数不接收任何参数
  • { 表示函数体的开始

长安说

main 函数就像是你家的大门,程序运行时会从这里开始执行。每个可执行的 Rust 程序都必须有一个 main 函数。

第2行:println!("Hello, world!");

println!("Hello, world!");
  • println! 是一个宏(macro),用来打印文本到控制台
  • 注意后面有个 !,这表示它是宏,不是普通函数
  • "Hello, world!" 是要打印的字符串
  • ; 是语句结束符,Rust 的每条语句都要以分号结尾

注意

println! 后面有个感叹号 !,一定不要忘记!有感叹号表示这是一个宏,没有感叹号的话编译器会报错。

第3行:}

}

这个大括号表示 main 函数的结束。

🏃 运行程序

在项目目录下,运行:

cargo run

你会看到:

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

让我们理解一下这个输出:

  1. Compiling...: Cargo 正在编译你的代码
  2. Finished...: 编译完成,生成了可执行文件
  3. Running...: Cargo 运行你的程序
  4. Hello, world!: 这是你的程序输出的内容

长安说

第一次运行可能需要几秒钟,因为 Rust 需要编译整个项目。之后如果代码没变,运行会快很多。

🔍 理解编译过程

Rust 是一门编译型语言,这意味着:

  1. 编写代码:你写的是 .rs 源文件
  2. 编译:Rust 编译器将源代码转换成机器码(可执行文件)
  3. 运行:直接运行生成的可执行文件

这和 Python、JavaScript 等解释型语言不同,后者是边运行边解释代码。

编译型语言的优点:

  • ✅ 运行速度快
  • ✅ 编译时就能发现很多错误
  • ✅ 生成的可执行文件可以独立运行,不需要安装 Rust

缺点:

  • ❌ 编译需要时间(但 Rust 的编译速度还不错)

🛠️ Cargo 的其他命令

只编译,不运行

cargo build

这会在 target/debug/ 目录下生成可执行文件,但不会运行它。

检查代码

cargo check

这个命令只检查代码能否编译,但不生成可执行文件,速度比 cargo build 快得多。写代码时可以经常用这个命令检查有没有错误。

编译优化版本

cargo build --release

这会生成优化后的版本,运行速度更快,但编译时间更长。生成的文件在 target/release/ 目录下。

长安说

开发时用 cargo run(默认是 debug 模式),发布时用 cargo build --release。

🎨 修改 Hello World

让我们试着修改一下程序,打印一些不同的内容。

打开 src/main.rs,修改成:

fn main() {
    println!("你好,世界!");
    println!("我叫长安");
    println!("这是我的第一个 Rust 程序!");
}

保存文件,然后运行:

cargo run

输出:

你好,世界!
我叫长安
这是我的第一个 Rust 程序!

长安说

println! 可以打印任何文本,包括中文、emoji 等。Rust 对 Unicode 的支持非常好!

📐 格式化输出

println! 还可以打印变量的值。试试这个:

fn main() {
    println!("我的名字是 {}", "长安");
    println!("我今年 {} 岁", 25);
    println!("我喜欢 {} 和 {}", "编程", "旅行");
}

运行后看到:

我的名字是 长安
我今年 25 岁
我喜欢 编程 和 旅行

{} 是一个占位符,会被后面的值替换。

注意

占位符的数量必须和后面提供的值的数量一致,否则会编译错误。

💡 常见错误和解决方法

错误1:忘记感叹号

fn main() {
    println("Hello, world!");  // ❌ 错误!
}

错误信息:

error: expected `;`, found `(`

解决方法:改成 println!(加感叹号)

错误2:忘记分号

fn main() {
    println!("Hello, world!")  // ❌ 错误!缺少分号
}

错误信息:

error: expected `;`

解决方法:在行尾加上分号 ;

错误3:双引号不匹配

fn main() {
    println!("Hello, world!);  // ❌ 错误!缺少右引号
}

错误信息:

error: unterminated string literal

解决方法:确保字符串两边都有双引号

长安说

Rust 的编译器错误提示非常友好,它会明确告诉你哪里错了、为什么错了,甚至怎么改。遇到错误不要慌,仔细看错误信息!

💡 小结

在这一章,我们学会了:

  • 使用 cargo new 创建新项目
  • 理解 Rust 项目的基本结构(Cargo.toml 和 src/main.rs)
  • main 函数是程序的入口
  • 使用 println! 宏打印输出
  • 使用 cargo run 编译并运行程序
  • 理解编译型语言的工作方式
  • 使用占位符 {} 格式化输出

🚀 下一步

现在你已经会写简单的 Rust 程序了!但要写更复杂的程序,我们需要学习变量。

下一章,我们会学习如何在 Rust 中定义和使用变量,以及 Rust 独特的"不可变性"概念。

第4章 - 变量与可变性 →

💪 练习题

动手试试这些练习:

  1. 创建一个新项目 my_info,打印你的姓名、年龄和爱好
  2. 使用占位符 {} 打印一句话:"我叫{名字},我{年龄}岁了"
  3. 打印一个包含 emoji 的句子,比如 "我爱编程 💻"
  4. 试着故意写一个错误的代码(比如忘记分号),看看编译器的错误提示
答案示例
// 练习1 和 2
fn main() {
    println!("我叫 {}", "长安");
    println!("我 {} 岁了", 25);
    println!("我喜欢:");
    println!("  - 编程");
    println!("  - 旅行");
    println!("  - 阅读");
    
    // 练习3
    println!("我爱编程 💻");
    println!("今天天气真好 ☀️");
}
最近更新: 2025/12/26 18:01
Contributors: 王长安
Prev
第2章 - 安装 Rust
Next
第4章 - 变量与可变性