返回文章列表

文章

关于Rust中mod.rs用法

目录
  1. 从 Rust 2018 Edition 开始,使用与模块同名的文件夹 + 同名 .rs 文件的方式可以完全替代 ****mod.rs,这是官方推荐的新模块组织方式,称为“文件系统模块重构(File System Module Reorganization)”。
  2. ✅ 模块同名的文件夹可以完全替代 mod.rs 的结构
  3. 📌 规则对比(旧 vs 新)
  4. ✅ 推荐用法示例(无 mod.rs)
  5. ⚠️ 注意事项
  6. ✅ 结论
  7. 📎 参考文章

Rust 2018 Edition 开始,使用与模块同名的文件夹 + 同名 .rs 文件的方式可以完全替代 ****mod.rs,这是官方推荐的新模块组织方式,称为“文件系统模块重构(File System Module Reorganization)”。#

模块同名的文件夹可以完全替代 mod.rs 的结构#

假设你有这样一个模块结构(旧的方式):

src/
├── main.rs
└── network/
    ├── mod.rs
    ├── client.rs
    └── server.rs

可以重构为如下新结构:

src/
├── main.rs
├── network.rs           // 取代原来的 network/mod.rs
└── network/
    ├── client.rs
    └── server.rs

main.rs 中写:

mod network;

fn main() {
    network::client::connect();
}

network.rs 中:

pub mod client;
pub mod server;

pub fn init() {
    println!("Network initialized");
}

📌 规则对比(旧 vs 新)#

功能/行为Rust 2015 (`mod.rs`)Rust 2018+(扁平化结构)
模块入口文件`foo/mod.rs``foo.rs`
子模块文件`foo/bar.rs`,在 `mod.rs` 中声明 `mod bar;`同样是 `foo/bar.rs`,但在 `foo.rs` 中声明
使用习惯层级嵌套深更扁平、更简洁
推荐度已逐步弃用✅ 推荐使用

✅ 推荐用法示例(无 mod.rs#

src/
├── main.rs
├── auth.rs
└── auth/
    ├── jwt.rs
    └── session.rs

auth.rs 中:

pub mod jwt;
pub mod session;

pub fn authenticate() {
    println!("Authenticating...");
}

main.rs 中:

mod auth;

fn main() {
    auth::authenticate();
    auth::jwt::parse_token();
}

⚠️ 注意事项#

  1. 不要混用 mod.rs 和 ****foo.rs
    • 如果你使用 foo.rs,就不要在 foo/ 目录中放 mod.rs,否则可能导致重复定义错误。
    • 选择其中一种风格保持一致。
  2. 文件名与目录结构必须对应
    • mod foo; 会查找 foo.rsfoo/mod.rs,不能自己改名字。
  3. 工具支持
    • rust-analyzer 等工具对“扁平化结构”支持良好,提示和跳转更清晰。

✅ 结论#

  • 是的,使用同名 .rs 文件 + 同名目录(扁平结构)可以 100% 替代 ****mod.rs
  • 在 Rust 2018+ 项目中,推荐完全不用 ****mod.rs,除非你维护的是旧代码或依赖旧工具链。
  • 保持一致的模块结构风格,是维护大型项目的关键。 如果你正在写一个新项目,建议采用 foo.rs + foo/ 目录结构,避免使用 ****mod.rs。这样结构更清晰,模块层级更扁平,利于维护和重构。

📎 参考文章#