1. wiki
Rust 提供了许多功能来管理代码的组织:
- 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。
- Crates :一个模块的树形结构,它形成了库或二进制项目。
- 模块(Modules)和
use
: 允许你控制作用域和路径的私有性。 - 路径(path):一个命名例如结构体、函数或模块等项的方式
1. 包和 crate
- crate 是 Rust 在编译时最小的代码单位,编译器以它为起始点,两种形式:
- 二进制项:可以被编译为可执行程序,必须有一个 main 函数,如一个命令行程序或一个 server
- 库:不会编译为可执行程序,没有 main 函数,它提供一些诸如函数之类的东西,大多时候是库
- 包是提供一系列功能的一个或者多个 crate,一个包会包含有一个 Cargo.toml 文件,阐述如何去构建这些 crate
包的规则:
- 一个包中至多只能包含一个库 crate(library crate)
- 包中可以包含任意多个二进制 crate(binary crate)
- 包中至少包含一个 crate,无论是库的还是二进制的
包的基本结构:
- 唯一库包:
src/lib.rs
- 默认二进制包:
src/main.rs
,编译后生成的可执行文件与 Package 同名 - 其余二进制包:
src/bin/main1.rs
和src/bin/main2.rs
,它们会分别生成一个文件同名的二进制可执行文件 - 集成测试文件:
tests
目录下 - 基准性能测试 benchmark 文件:
benches
目录下 - 项目示例:
examples
目录下
1 | . |
2. 模块
模块可以将一个 crate 中的代码进行分组,以提高可读性与重用性。模块还可以控制项的私有性,默认是私有的。使用关键字 mod 来定义模块,规则如下:
- 使用
mod
关键字来创建新模块,后面紧跟着模块名 - 模块可以嵌套
- 模块中可以定义各种 Rust 类型,如函数、结构体、枚举、特征等
- 所有模块均定义在同一个文件中
- 父模块无法访问子模块中的私有项,但是子模块却可以访问父模块的
- 可以使用
pub
关键字,控制模块和模块中指定项的可见性 - 使用
super
和self
关键字,简化相对路径引用 - 将结构体设置为
pub
,但它的所有字段依然是私有的 - 将枚举设置为
pub
,它的所有字段也将对外可见 - 使用
use
关键字将名称引入作用域