You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:48:16