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

Rust如何导入存放在子文件夹中的公开module模块

Rust子文件夹模块导入解决方案(适用Rust 2018/2021版本)

首先明确Rust模块的基础规则:所有模块都需要先在父级模块中声明才能使用,在根模块(main.rs/lib.rs)声明mod cpu;时,Rust默认会查找两个路径:

  1. 同级目录下的cpu.rs文件
  2. 同级目录下cpu/文件夹内的mod.rs文件

你当前的文件结构不符合默认查找规则,因此可以选择以下任意一种方案解决:


方案1:调整为标准目录模块结构(推荐)

该方案符合Rust官方约定,适合长期维护的项目:

  • 第一步:将src/cpu/cpu.rs的所有内容移动到新建的src/cpu/mod.rs文件中,删除原有的src/cpu/cpu.rs,调整后的文件结构如下:
src/
├── main.rs
└── cpu/
    └── mod.rs
  • 第二步:在src/main.rs顶部添加模块声明和导入代码:
mod cpu;
use cpu::{Cpu, thing};

fn main() {
    println!("Hello, world!");

    let c : Cpu;
    thing();
}

如果后续cpu模块需要拆分更多子文件,直接在cpu/目录下新增文件,在mod.rs中导出对应内容即可。


方案2:不修改现有文件结构,手动指定模块路径

适合临时调整、不想改动文件结构的场景,要求Rust版本≥1.60:

  • 直接在src/main.rs顶部通过#[path]属性指定cpu模块的文件路径:
#[path = "cpu/cpu.rs"]
mod cpu;
use cpu::{Cpu, thing};

fn main() {
    println!("Hello, world!");

    let c : Cpu;
    thing();
}

注意#[path]后的路径是相对于当前main.rs文件的相对路径。


报错原因说明

之前使用use crate::cpu::{Cpu, thing};报错是因为你没有在根模块声明cpu模块,Rust不会自动识别文件夹下的文件为模块,必须显式声明后才能导入使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:09:04