Skip to content

Crate:最小的编译单元

概念名称: Crate 是 Rust 最小的编译单元,模块组织 Crate 内部的代码。

语法结构:
┌──────────────────────────────────────┐
│  mod 模块名 {                         │
│      pub fn 公开函数() { ... }        │
│      fn 私有函数() { ... }            │
│  }                                    │
│                                       │
│  文件模块:                            │
│  src/module_name.rs 或               │
│  src/module_name/mod.rs              │
│                                       │
│  使用:                                │
│  use crate::module::function;        │
│  use super::sibling_module;          │
└──────────────────────────────────────┘

最简示例

rust
mod math {
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }
}

fn main() {
    println!("{}", math::add(1, 2));
}
▶ Run

什么是 Crate

┌─────────────────────────────────────────────────────┐
│              Crate 是什么                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  Crate 是 Rust 最小的编译单元                        │
│                                                     │
│  两种类型:                                          │
│  ┌─────────────────────────────────────────────┐   │
│  │ 库 Crate (Library Crate)                    │   │
│  │  - 不能独立运行,提供可复用的代码            │   │
│  │  - 根文件:src/lib.rs                        │   │
│  └─────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────┐   │
│  │ 二进制 Crate (Binary Crate)                 │   │
│  │  - 可独立运行的程序                          │   │
│  │  - 根文件:src/main.rs                       │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
└─────────────────────────────────────────────────────┘

为什么用它?

rust
// 没有模块:所有代码在一个文件,难以维护
// main.rs 有 1000 行代码...

// 有模块:按功能拆分,清晰可维护
// src/
// ├── main.rs         ← 入口
// ├── models.rs       ← 数据模型
// ├── handlers.rs     ← 请求处理
// └── utils.rs        ← 工具函数
▶ Run

Package:Crate 的容器

bash
my_package/                  # 一个 Package
├── Cargo.toml               # Package 的清单文件
├── src/
   ├── lib.rs               # 库 Crate(可选)
   └── main.rs              # 二进制 Crate(可选)
└── tests/                   # 集成测试

一个 Package 可以包含:

  • 至多一个库 Crate
  • 多个二进制 Crate
  • 但不能只有二进制 Crate 而没有库 Crate

关键代码说明:

代码含义为什么这样写
mod math { ... }内联模块适合小模块,代码在同一文件
pub fn add(...)公开函数pub 使外部可访问
fn 私有函数()私有函数默认私有,模块内可见
use crate::...引入路径避免重复写完整路径