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,程序就不知道从哪开始跑。

注意:每个可执行的 Rust 程序必须有且只有一个 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 build)→ 生成可执行文件 → 运行(./可执行文件)。cargo run 只是把后两步合并了。

3.4 知识体系图

下面这张图,帮你把本章的核心逻辑串起来:

Hello, World! 核心流程 cargo new 创建项目骨架 编写 main.rs fn main() { ... } cargo build 编译成可执行文件 运行程序 Hello, world! 快捷方式:cargo run (编译 + 运行 一步到位) main 函数是程序的入口点,cargo 负责管理整个生命周期

3.5 避坑指南

讲几个我踩过的坑,你遇到了能少走弯路。

  • 文件名别写错。Rust 源文件必须用 .rs 后缀。我曾经把文件存成 .rs.txt,编译时死活找不到……
  • main 函数不能少。如果你写的是可执行程序,必须有一个 fn main()。少了大括号都不行。
  • println 后面是感叹号。很多新手会写成 println(),少了感叹号。记住,println! 是宏,不是函数。
  • 分号不能丢。Rust 里每条语句末尾都要加分号。丢了分号,编译器会报错。
我的小技巧:如果你不确定代码对不对,先跑 cargo check。它只检查语法错误,不生成可执行文件,速度比 cargo build 快很多。开发时我几乎每改几行就 check 一次,确保没有低级错误。

3.6 总结

这一章,我们做了三件事:

  1. cargo new 创建了第一个 Rust 项目
  2. 理解了 main 函数的结构和作用
  3. 掌握了编译和运行的完整流程

你现在已经能写一个能跑起来的 Rust 程序了。虽然只是打印一行字,但整个工具链你已经摸熟了。后面我们会在这个基础上,一步步往里面加东西——变量、函数、控制流……

嗯,路已经铺好了,接下来就是加速跑的时候了。


专注资料整理