如何在Rust中导入深层目录下的模块?代码示例求助
解决Rust模块导入问题
核心结论
不需要修改Cargo.toml,只需要添加两个mod.rs文件并调整导入路径即可完成模块导入,这是Rust内部模块系统的标准用法。
步骤1:创建必要的mod.rs文件
你的目录结构需要补充两个mod.rs文件,最终结构如下:
src/ ├── main.rs └── user/ ├── mod.rs └── entity/ ├── mod.rs └── user.rs
编写src/user/mod.rs
这个文件用来声明entity是user模块的子模块:
pub mod entity;
编写src/user/entity/mod.rs
这个文件用来声明user是entity模块的子模块,同时可以直接导出User结构体简化导入:
pub mod user; // 可选:直接导出User,这样上层模块可以直接引用User而不用写user::User pub use self::user::User;
步骤2:调整main.rs的导入语句
根据entity/mod.rs的写法,有两种导入方式:
方式1(推荐,使用pub use导出)
如果src/user/entity/mod.rs中添加了pub use self::user::User,那么你的原导入语句可以直接使用:
use user::entity::User; fn main() { // 你的原有代码保持不变 let mut _user = User::new("John".to_string(), "j@j.com".to_string(), 30, true); // ... 后续代码省略 }
方式2(不使用pub use)
如果没加pub use,需要完整写出模块路径:
use user::entity::user::User; fn main() { // 原有代码不变 }
为什么要这么做?
Rust的模块系统遵循“文件即模块”的规则,但目录作为模块时,需要通过mod.rs告诉编译器该目录下的子模块结构。每个mod.rs相当于目录的“入口文件”,负责暴露内部的子模块和类型,让上层模块可以访问。
内容的提问来源于stack exchange,提问作者Abner Matheus
相关产品推荐
相关产品推荐

