类似es6的模块化,Rust通过package、create、module来实现代码的模块化管理
Rust如何进行模块化开发?
Rust的代码组织包括:哪些细节可以暴露,哪些细节是私有的,作用域内哪些名称有效等等。
而这些功能被统称为模块系统,模块系统被分为(由上到下层层包含):
- Package(包):Cargo的特性,让你构建、测试、共享create
- Create(单元包):一个模块树,它可以产生一个library或可执行文件
- Module(模块)、use:让你控制代码的组织、作用域、私有路径
- Path(路径):为struct、function或module等项命名的方式
Package和Create
create的类型:
- binary(二进制create)
- library(库create)
其中,关于Create,还有个概念——Create Root:
- 是源代码文件
- Rust编译器从这里开始,组成你的Create的根Module
一个Package:
- 包含一个Cargo.toml,它描述了如何构建这些Crates
- 只能包含0-1个library create(库create)
- 可以包含任意数量的binary create(二进制create)
- 但必须至少包含一个create(library或binary)
我们使用cargo新建一个项目
然后会提示: Created binary (application) my-project
package,这代表我们创建了一个二进制的应用程序,名叫my-project
的package
我们进入这个文件夹:
我们可以看到src/min.rs文件,这是我们程序的入口文件,但是我们在Cargo.toml中并没有看到相关的配置:
[package]
name = "my-project"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
这是因为cargo有一些惯例
Cargo的惯例
-
src/main.rs是binary create的create root* create的名与package名相同如果我们还有一个这个文件:src/lib.rs,那么:
-
表明package包含一个library create
-
它是library create的create root
-
create的名与package名相同
Cargo将会把create root文件交给rustc(rust编译器)来构建library或者binary
一个Package可以同时包含src/main.rs和src/lib.rs
一个Package也可以有多个binary create:
- 文件放在src/bin,放在这里的每个文件都是单独的binary create
Create的作用
将相关功能组合到一个作