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

Rust Crate正确组织结构 两种目录方案差异与惯用选型

两种结构的等价性判断

首先你列出的第一种文件结构是无效的:foo/、bar/目录放在crate根目录与src/平级时,Cargo默认不会将这两个目录下的代码纳入编译范围,完全无法实现预期的模块调用。
如果是笔误将foo/、bar/放在src/目录下,修正后的结构为:

some-crate/
|- src/
|   |- bits.rs
|   |- bobs.rs
|   |- lib.rs
|   |- foo/
|   |   |- mod.rs
|   |- bar/
|   |   |- mod.rs

此时当foo、bar模块本身没有嵌套子模块时,它和你列出的第二种结构在模块访问逻辑上完全等价:

  • 只要在lib.rs中声明mod foo; mod bar; mod bits; mod bobs;,两种结构都支持some-crate::foo::do_this()形式的调用
  • 只要bits.rs、bobs.rs中需要对外暴露的项标记为pub,foo、bar模块都可以通过crate::bits::xxx、crate::bobs::xxx路径访问公共项,满足跨模块调用需求。
符合Rust惯用写法的推荐方案

结合你提到的「总共仅4个子模块、规模小无过重管理负担」的需求,优先选择第二种单文件结构:

  • 这种扁平结构是当前Rust社区更推荐的小项目模块写法,不需要额外创建目录、维护多余的mod.rs文件,浏览代码时不需要在多个同名mod.rs之间切换,定位文件效率更高
  • 后续如果某个模块需要扩展子模块、拆分多文件,随时可以把对应单文件(比如src/foo.rs)替换为src/foo/mod.rs目录结构,上层的模块声明、外部调用路径完全不需要改动,迁移零成本。

补充:目录名/mod.rs的写法更适合模块本身存在多个子模块、或者单模块代码量过大需要拆分为多个同层级文件的场景,小体量模块提前用这种结构属于不必要的冗余。

内容的提问来源于stack exchange,提问作者MattP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:54:52