【rust】 pub(crate) 的用法

rust 复制代码
pub(crate) struct Aile {
    f: tokio::fs::File,
    cur_file: String,
    t_offset: i64,
    r: String,
}

pub(crate) 是什么意思?

  • Rust 里用来修饰可见性(visibility)的关键字。

  • pub:公共,任何地方都能访问。

  • pub(crate)只在当前 crate 内可见

    • 也就是说,这个 AdFile 结构体在同一个 crate 的模块之间可以自由使用。

    • 但是如果别的 crate 依赖了这个库,就不能直接访问 AdFile


什么是 crate?

  • crate 是 Rust 的编译单元,可以是:

    • 一个 可执行程序 (binary crate,比如 main.rs)。

    • 或者一个 (library crate,比如 lib.rs)。

  • 一个 crate 可以包含多个 模块(mod)

  • 举个比喻:

    • crate ≈ 一个独立项目(或一个包)。

    • mod ≈ 这个项目里的子目录/文件。

为什么要用 pub(crate)

你这里的 Aile 明显是日志记录模块内部的实现细节:

  • 只想让 同一个项目里的其他模块 (比如 AdTracker)能用它;

  • 但不希望被 crate 之外的用户直接访问(避免外部 API 污染或误用)。

这样做的好处:

  1. 封装性 :外部用户只能通过你暴露的更高级 API(比如 AdTracker),而不是直接操作 AdFile

  2. 灵活性:内部结构随时能调整,不会破坏对外接口的稳定性。

pub(crate) 限制 AdFile 只能在当前 crate 内使用。crate 是 Rust 的最小编译单元,可以理解为"当前项目/包"。这种写法通常是为了隐藏内部实现,只给外部暴露更高层次的接口

相关推荐
JaguarJack6 分钟前
PHP clone 之后,为什么改副本会影响原对象?
后端·php·服务端
小灰灰搞电子26 分钟前
Rust+Slint 实现动态消息提示框源码分享
开发语言·后端·rust
小奏技术1 小时前
10 MB 的 Postman 替代品,启动不到 1 秒
后端
东风破_1 小时前
Text2SQL :用自然语言操作 SQLite 数据库
人工智能·后端
传奇开心果编程2 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
新时代牛马2 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
swordbob2 小时前
ReentrantLock 与 AQS 完整学习手册
java·开发语言
白山编程大哥3 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
shmily麻瓜小菜鸡4 小时前
JavaScript / TypeScript 易踩坑知识点 —— 异步编程类
开发语言·javascript·typescript
七夜zippoe4 小时前
为什么 2026 年每个 Java 团队都该懂 AI Agent
java·开发语言·人工智能