如何在Rust项目中让模块私有且可被同项目其他模块调用?
Rust项目内模块可见性配置方案
你遇到的问题根源在于:默认项目结构里,main.rs是独立的二进制 crate,lib.rs是库 crate,二者属于不同的编译单元。pub(crate)的可见性只限定在定义它的库 crate 内部,所以二进制 crate 无法访问这个模块。
以下是最符合需求的解决方案:
将二进制入口并入库 crate(推荐)
这种方法能让main.rs和lib.rs共享同一个 crate 上下文,既满足项目内可访问,又不会对外暴露模块:
- 在项目的
src目录下创建bin子文件夹:mkdir src/bin - 把原
src/main.rs移动到src/bin目录中:mv src/main.rs src/bin/main.rs - 保持
lib.rs中的模块定义不变:pub(crate) mod args; - 在
src/bin/main.rs里,通过crate::args::Cli;引用模块即可
这样配置后,当其他项目把你的库作为依赖时,args模块会因为pub(crate)的可见性限制而无法被访问,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Finlay Weber
相关产品推荐
相关产品推荐

