【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 的最小编译单元,可以理解为"当前项目/包"。这种写法通常是为了隐藏内部实现,只给外部暴露更高层次的接口。

相关推荐
焦玉全几秒前
Sharding-JDBC 分库分表实战:从 800 万订单表的查询优化说起
后端
王中阳Go2 分钟前
面试官问"你怎么证明它有效",200个转AI的后端没几个答得上来
人工智能·后端·面试
鹤卿1232 分钟前
「iOS」GCD
开发语言·ios·objective-c
我是小白呀4 分钟前
编排还是事件协作?用 AcmeFlow 讲清企业 Workflow 的控制权
java·开发语言
ACP广源盛139246256737 分钟前
接口适配方案选型|GSV6125@ACP HDMI2.0 转 Type‑C/DP1.4 桥接芯片工程评估
大数据·c语言·开发语言·硬件架构·硬件工程·国产芯片
深入云栈17 分钟前
Netty 4.2.x 源码深度解析 (十四):KQueue 传输 —— macOS 高性能 IO 的 Netty 实现
java·后端
一只公羊18 分钟前
在 Ubuntu 26.04 LTS (Root) 下使用 uv 丝滑安装 Microsoft MarkItDown
后端
小羊没烦恼!22 分钟前
【译】利用Asp.net MVC处理文件的上传下载
开发语言·缓存·c#·word·powerpoint·.net
dd聊技术23 分钟前
一张本地消息表装两个业务:差异一点没进表里
后端