如何简单快速地将 Rust 程序拆分为多个独立文件?
Rust 多文件拆分最简实现方案
以下方案适用于绝大多数单包(package)的二进制/库项目,不需要修改配置文件,几步即可落地:
前置条件
你的项目是通过cargo new创建的标准项目,初始结构如下:
your_project/ ├── Cargo.toml └── src/ └── main.rs # 库项目则是lib.rs
拆分步骤
场景1:单文件模块拆分
假设你要把通用工具逻辑抽成单独的utils模块:
- 在
src目录下新建utils.rs文件,把需要拆分的代码写入,对外暴露的项前加pub关键字:
// src/utils.rs // 对外暴露的函数 pub fn calc_score(score_list: &[u32]) -> u32 { score_list.iter().sum() } // 对外暴露的结构体,字段需要外部访问也要加pub pub struct Student { pub id: u64, pub name: String, }
- 在
main.rs(或lib.rs)顶部添加模块声明:mod utils; - 直接调用模块内的公开项即可:
// src/main.rs mod utils; fn main() { let s = utils::Student { id: 1001, name: "Li Ming".to_string(), }; let total = utils::calc_score(&[90, 85, 95]); println!("{} 的总分为 {}", s.name, total); }
场景2:文件夹级模块拆分
如果单个模块的代码太多,还可以拆成文件夹形式的多级模块:
- 在
src目录下新建utils文件夹,在文件夹内新建mod.rs文件,作为该模块的入口 - 把需要拆分的子模块写入
utils文件夹内,比如新建string_helper.rs写入字符串处理逻辑 - 在
utils/mod.rs中声明子模块,需要对外暴露就加pub:
// src/utils/mod.rs pub mod string_helper; mod math_helper; // 不对外暴露,仅模块内部使用
main.rs中仍然只需要声明mod utils;,调用子模块项时加层级前缀即可:utils::string_helper::escape_str("xxx")
注意事项
- 以上方案完全不需要修改
Cargo.toml,也不需要理解复杂的多包、工作区概念,足够支撑代码量在10万行以内的绝大多数项目的拆分需求 - 仅当你需要把代码抽成可独立发布、跨项目复用的库时,才需要用到多crate、workspace等进阶配置
内容的提问来源于stack exchange,提问作者Jon Watte
相关产品推荐
相关产品推荐

