Skip to content

模块

mod 声明模块,文件系统决定模块树。use 把路径引入当前作用域,pub 控制可见性。crate 根是 src/lib.rssrc/main.rs

文件布局

bash
src/
├── lib.rs
├── auth.rs              # crate::auth
└── user/
    ├── mod.rs           # crate::user
    └── account.rs       # crate::user::account
rust
// src/lib.rs
mod auth;
mod user;

pub use auth::login;

mod foo; 会加载 foo.rsfoo/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。

基于 MIT 许可发布