Lv777

Lv777

github
twitter
jike
playstation
xiaoyuzhou

模塊

package#

package 是由一个或多个 crate 组成的集合。Cargo 项目是一个包。

一个包可以包含一个或多个二进制项,但只能包含一个库。这是为什么呢?是为了发布的原因吗?要创建其他二进制项,只需将文件放在 src/bin 目录下,即可编译成独立的二进制文件。

crate#

crate 分为二进制项,Cargo 创建的默认模板只包含一个二进制项,约定 src/main.rs 是入口根文件。Cargo 还约定 src/lib.rs 为库的根文件。

编译一个 crate 从根文件开始寻找所需的代码。

mod#

mod 用于将 crate 的代码分组,也可以为模块创建子模块,模块中的代码默认为私有。

mod web {
	mod client {
		mod home {}
		fn get_env() {}
	}
	mod server {
		struct DTO {
			id: String
		}
	}
}

路径#

  • 绝对路径 以 crate 名(同一个 crate 使用 crate)开头的全路径。
  • 相对路径 从当前模块出发使用 selfsuper 和模块名定位的路径。

use#

使用 use 关键字引入可访问的模块,即可直接使用该模块作用域的内容,类似于 JS 的 import

  • 对于函数的引入,习惯引入其父模块并在调用时指定,有点像 call(this) 的感觉。
  • 对于结构体、枚举等,习惯引用完整路径并直接使用。
use web::client;

use web::server::DTO;

client.get_env();

DTO {
	id: String::from(""),
};
// 重导出
pub use web::server;
// 嵌套引入
use web::{self, server::DTO};
// 引入 web 所有公开子模块
use web::*;

模块文件#

将一个大的模块拆分为多个文件更有利于阅读,与前端模块化的思路一致。

web
├── client
│	└── home.rs
└── server.rs
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。