Rust导入模块失败:无法解析auth::mssql导入的问题求助
Rust导入模块失败:无法解析auth::mssql导入的问题求助
我太懂这种翻了一堆例子还是摸不着头脑的感觉了!其实问题出在Rust模块系统的一个核心规则上——模块不会自动被识别,必须显式在父模块中声明,你的代码刚好漏掉了最关键的那一步。
先给你说透问题根源:
你的auth.rs虽然放在src目录下,但作为crate根模块的main.rs里并没有声明auth这个模块,所以整个crate的模块树里根本就没有auth这一项,pipeline.rs自然找不到crate::auth::mssql。
具体解决方案
只需要两步就能搞定:
1. 修改main.rs,引入auth模块
在main.rs里添加pub mod auth;,让根模块知道auth模块的存在,这样整个crate内的其他模块都能通过crate::auth路径访问它:
pub mod pipeline; pub mod auth; // 新增这一行,把auth模块加入crate的模块树 use crate::pipeline::Pipeline; fn main() { let p = Pipeline {credentials: "my_user".to_string()}; // 要是想测试认证功能,可以加上这行 // p.get_auth(); }
2. 保留pipeline.rs的正确use语句
你原来pipeline.rs里的use语句本身是对的,只要根模块引入了auth,use crate::auth::mssql;就能正常工作,不需要修改:
use crate::auth::mssql; // 现在可以正常找到模块了 pub struct Pipeline { pub credentials: String, } impl Pipeline { pub fn get_auth() { mssql::authenticate(); } }
给你补个Rust模块的小知识点
Rust的模块系统不像某些语言那样自动扫描目录文件生成模块树,必须通过pub mod xxx;手动把文件/目录引入到模块树中:
- 如果你有
auth.rs,就在父模块(这里是根模块main.rs)里写pub mod auth; - 如果你有
auth/mssql.rs,就在auth.rs里写pub mod mssql;(这一步你已经做对啦!)
这样整个模块树就变成了:
crate ├── main (根模块) │ ├── pipeline │ └── auth │ └── mssql
所有模块都能通过crate::xxx::xxx的绝对路径正常访问了。
你可以试试现在运行cargo run,要是在main里调用p.get_auth(),就能看到打印的authenticated了!
备注:内容来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

