主题
模块
mod 声明模块,文件系统决定模块树。use 把路径引入当前作用域,pub 控制可见性。crate 根是 src/lib.rs 或 src/main.rs。
文件布局
bash
src/
├── lib.rs
├── auth.rs # crate::auth
└── user/
├── mod.rs # crate::user
└── account.rs # crate::user::accountrust
// src/lib.rs
mod auth;
mod user;
pub use auth::login;mod foo; 会加载 foo.rs 或 foo/mod.rs。子模块必须在父模块里声明,仅有文件不会自动加入编译。
内联模块用于很小的边界:
rust
mod auth {
pub fn login() {}
}路径
| 前缀 | 含义 |
|---|---|
crate:: | 从当前 crate 根开始 |
super:: | 父模块 |
self:: | 当前模块 |
| 无前缀 | 先看当前作用域,再看 prelude |
rust
use crate::user::account::Account;
use super::auth;use 只影响名称解析,不改变可见性。对外再导出用 pub use,形成 crate 的公开 API。
可见性
| 修饰 | 可见范围 |
|---|---|
| 无 | 仅当前模块及其子模块 |
pub | 外部 crate 也可访问 |
pub(crate) | 当前 crate 内 |
pub(super) | 父模块 |
结构体字段默认私有。即使类型是 pub,字段也要单独标 pub 才能从外部读写。枚举变体的可见性跟随枚举本身。
集成测试和下游 crate 只能用 pub 项。crate 内部复用优先 pub(crate),避免过早承诺公开 API。
