3. Hello, World!:用cargo创建第一个项目、理解main函数、编译与运行流程
好,咱们开始动手写代码了。
这一章,我会带你走完一个完整的流程——从创建项目,到写代码,再到编译运行。说白了,就是让你亲眼看到「Rust 程序是怎么活起来的」。
我个人习惯,学任何新语言,第一件事就是跑通 Hello, World。这就像新兵入伍先学会敬礼一样,仪式感得有,但更重要的是,你能借此摸清整个工具链的脾气。
3.1 用 cargo 创建第一个项目
还记得上一章我让你安装的 cargo 吗?它不只是包管理器,更是 Rust 的项目管家。创建新项目,一条命令搞定。
cargo new hello_world
运行完,你会看到这样的输出:
Created binary (application) `hello_world` package
嗯,项目就建好了。cargo 帮你生成了这些文件:
| 文件/目录 | 作用 |
|---|---|
Cargo.toml |
项目的配置文件,像身份证一样。里面写着项目名、版本、依赖等信息。 |
src/main.rs |
源代码文件。所有 Rust 代码都放在 src 目录下。 |
.gitignore |
Git 的忽略文件,cargo 贴心地帮你生成了。 |
打开 src/main.rs,你会看到 cargo 已经帮你写好了一段代码:
fn main() {
println!("Hello, world!");
}
这就是 Rust 版的 Hello, World。别小看这短短几行,里面藏着 Rust 最核心的结构。
Cargo.toml,确认项目名和版本号对不对。曾经有一次我手滑拼错了项目名,结果后面引用依赖时排查了半天……嗯,细节决定效率。
3.2 理解 main 函数
咱们来拆解一下刚才那段代码。
fn main() {
println!("Hello, world!");
}
fn是关键字,用来声明一个函数。Rust 里所有函数都用fn开头。main是函数名。它是程序的入口点——说白了,程序启动后,第一件事就是找main函数,然后从第一行开始执行。()表示这个函数没有参数。后面我们会学到带参数的函数。{}是函数体,里面放着要执行的代码。println!注意,这里有个感叹号。它是个宏,不是普通函数。宏是 Rust 里一个很强大的特性,后面会专门讲。现在你只需要知道,println!的作用是打印文本到控制台,末尾自动换行。
你想想看,为什么 main 函数这么重要?
因为它是程序的「大门」。操作系统加载你的程序后,会调用这个入口函数。如果找不到 main,程序就不知道从哪开始跑。
main 函数。如果你写了一个库(library),那就不需要 main 函数——库是被别人调用的,不是独立运行的。
3.3 编译与运行流程
代码写好了,怎么让它跑起来?
两种方式:
方式一:一步到位
cargo run
这条命令会帮你完成编译 + 运行两步。你会看到:
Compiling hello_world v0.1.0 (/path/to/hello_world)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.25s
Running `target/debug/hello_world`
Hello, world!
看到最后那行 Hello, world! 了吗?你的第一个 Rust 程序跑起来了。
方式二:分步执行
如果你想先编译,再手动运行:
cargo build
编译完成后,可执行文件在 target/debug/ 目录下。然后手动运行:
./target/debug/hello_world
效果一样,也会输出 Hello, world!。
我个人习惯在开发阶段用 cargo run,省事。等到要发布正式版本时,再用 cargo build --release 做优化编译。
cargo run 只是把后两步合并了。
3.4 知识体系图
下面这张图,帮你把本章的核心逻辑串起来:
3.5 避坑指南
讲几个我踩过的坑,你遇到了能少走弯路。
- 文件名别写错。Rust 源文件必须用
.rs后缀。我曾经把文件存成.rs.txt,编译时死活找不到…… - main 函数不能少。如果你写的是可执行程序,必须有一个
fn main()。少了大括号都不行。 - println 后面是感叹号。很多新手会写成
println(),少了感叹号。记住,println!是宏,不是函数。 - 分号不能丢。Rust 里每条语句末尾都要加分号。丢了分号,编译器会报错。
cargo check。它只检查语法错误,不生成可执行文件,速度比 cargo build 快很多。开发时我几乎每改几行就 check 一次,确保没有低级错误。
3.6 总结
这一章,我们做了三件事:
- 用
cargo new创建了第一个 Rust 项目 - 理解了
main函数的结构和作用 - 掌握了编译和运行的完整流程
你现在已经能写一个能跑起来的 Rust 程序了。虽然只是打印一行字,但整个工具链你已经摸熟了。后面我们会在这个基础上,一步步往里面加东西——变量、函数、控制流……
嗯,路已经铺好了,接下来就是加速跑的时候了。