7 Package(包), Crates(箱) and Modules(模块)
7.1 package and create
当我们使用cargo new my-project命令创建一个工程的时候,我们创建了一个package。
package包含一个cargo.toml文件
crate是rust编译的入口。 A crate is a binary or library
package至少要包含一个crate,可以包含0个或者多个lib crate,可以包含任意多个bin crate。
如果package包含src/main.rs, src/lib.rs, 那么就说package中包含一个和package同名的bin crate和一个同名的lib crate
在src/bin目录中存放的所有文件,都是一个单独的bin crate
7.2 module
module用来组织crate中的代码,和控制私有性。
module front_of_house; 来声明模块。
模块中的单元默认都是私有的,使用pub关键字,使得单元在外部可以使用
7.3 pub && use
公开的模块或者函数,可以通过use来引入到其他模块。
pub use联合使用,可以把一个引入的模块重新导出。
7.4 分文件
如果是叶子模块,那么只有一个对应名字的文件,包含模块内容
如果是非叶子模块,那么会有一个对应名字的文件,包含模块内容;并且会有一个目录,包含子模块内容。
src/lib.rs – module front_of_house; content of root module;
-front_of_house.rs – declare of module hosting & servering; content of module front_of_house;
-front_of_house/hosting – content of module hosting
-servering – content of module servering
7.5 Workspace
A workspace is a set of packages that share the same Cargo.lock and output directory.
当项目不断增大,需要把library crate分为多个的时候,需要用的这样的分割方式。
下面的例子,我们创建一个包含一个binary package和两个libraries
1 | mkdir add |