rust crate 单元
【摘要】 在 Rust 中,Crate(中文常译为“包”或“单元”) 是 Rust 代码的最基本编译和分发单位。它可以是一个可执行程序(binary crate)或一个库(library crate)。Crate 是 Rust 生态系统的核心概念,类似于其他语言中的“项目(Project)”、“包(Package)”或“库(Library)”。 1. Crate 的两种类型 (1) Binary Cr...
在 Rust 中,Crate(中文常译为“包”或“单元”) 是 Rust 代码的最基本编译和分发单位。它可以是一个可执行程序(binary crate)或一个库(library crate)。Crate 是 Rust 生态系统的核心概念,类似于其他语言中的“项目(Project)”、“包(Package)”或“库(Library)”。
1. Crate 的两种类型
(1) Binary Crate(可执行包)
- 编译后生成一个可执行文件(如
./target/debug/my_app
)。 - 包含
main.rs
文件(入口函数fn main()
)。 - 示例:
文件结构:cargo new my_app # 创建一个新的 binary crate
my_app/ ├── Cargo.toml # 依赖和元数据 └── src/ └── main.rs # 入口函数
(2) Library Crate(库包)
- 编译后生成一个
.rlib
或.so
/.dll
文件(供其他代码调用)。 - 包含
lib.rs
文件(库的公共接口)。 - 示例:
文件结构:cargo new my_lib --lib # 创建一个新的 library crate
my_lib/ ├── Cargo.toml └── src/ └── lib.rs # 库的公共 API
2. Crate 的核心特性
(1) 模块化(Modules)
- Crate 内部通过
mod
关键字组织代码(类似其他语言的“命名空间”或“包”)。 - 示例:
其他代码可以通过// src/lib.rs mod math { pub fn add(a: i32, b: i32) -> i32 { a + b } } pub fn greet() { println!("Hello from my_lib!"); }
my_lib::math::add()
调用。
(2) 依赖管理(Dependencies)
- 通过
Cargo.toml
声明依赖的外部 crate(如serde
、reqwest
)。 - 示例:
[dependencies] serde = { version = "1.0", features = ["derive"] } reqwest = "0.11"
(3) 可见性控制
- 使用
pub
关键字控制模块、函数或结构的公开性:pub fn public_function() {} // 可被外部调用 fn private_function() {} // 仅限当前 crate 内部使用
3. Crate 的作用域
(1) 本地 Crate
- 当前项目中的代码(如
src/main.rs
或src/lib.rs
)。
(2) 外部 Crate
- 通过
Cargo.toml
引入的第三方库(如serde
、tokio
)。 - 使用
use
导入:use serde::{Deserialize, Serialize};
(3) 标准库(std)
- Rust 内置的标准库(如
std::vec::Vec
、std::io
)。 - 默认自动引入,无需显式声明:
let vec: Vec<i32> = Vec::new(); // 来自 std::vec
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)