共计 2204 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 这篇文章主要向大家介绍 Rust 中的 workspace, 主要内容包括基础应用、实用技巧、原理机制等方面,这个概念在 Rust 中是通用的,只不过 maven 换成了 cargo,而模块变成了 crate,下面跟着小编通过一个例子给大家介绍下 |
java 项目中用 maven 管理代码时,如果遇到大型工程,一般会拆分成不同的模块,比如 spring-mvc 中,通常会按 model, view, controller 建 3 个模块,然后根据一定的依赖关系进行引用。这个概念在 Rust 中是通用的,只不过 maven 换成了 cargo,而模块变成了 crate,看下面的例子。
一、目录结构
.
├── Cargo.toml
├── controller
│ ├── Cargo.toml
│ └── src
│ └── main.rs
├── model
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
└── view
├── Cargo.toml
└── src
└── lib.rs
根目录下的 Cargo.toml,类似 maven 中的父 pom.xml,可以在其中声明子 ” 模块 ”:(注:为了避免与 rust 中的 mod” 模块 ” 产生混淆,后面还是用 crate 来称呼“子模块”)
[workspace]
members=[
"model",
"view",
"controller"
]
这里声明了 1 个所谓的 workspace,其中有 3 个成员,即 3 个目录对应的 crate
二、子 crata 中的 Cargo.toml 声明
假设上面的工程结构中:
model 不依赖其它 crate
view 依赖 model
controller 依赖 view 及 model
则这 3 个 crate 中的 Cargo.toml 文件,可以这样写:
model/Cargo.toml
[package]
name = "model"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 不依赖其它 crate, 此节点为空即可
view/Cargo.toml
[package]
name = "view"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 声明依赖 model
model = {path = "../model"}
controll/Cargo.toml
[package]
name = "controller"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
model = {path = "../model"}
view = {path = "../view"}
三、代码引用
有了前面的各 crate 依赖声明,就可以来写代码了,参见下面的示例:
3.1 model/src/lib.rs
#[derive(Debug)]
pub struct User{
pub username:String,
pub password:String
}
#[derive(Debug)]
pub struct Order{pub orderno:St
假设在 model 中定义了 2 个结构体 (即:OOP 中的 class)
3.2 view/src/lib.rs
// 使用 model 中的 User 类
use model::User;
pub fn get_login_info(name:String,pass:String)->User{
User{
username:name,
password:pass
}
}
3.3 controller/src/main.rs
use view::get_login_info;
use model::{User,Order};
fn main() {let mut u = get_login_info(String::from("test"), String::from("123456"));
u.password = String::from("abcde");
println!("{:?}", u);
let o = Order{orderno:String::from("20211244123")
};
println!("{:?}",o);
let u1 = User{username:String::from("abcd"),
password:String::from("*123*J")
};
println!("{:?}",u1);
}
运行结果:
User {username: "test", password: "abcde"}
Order {orderno: "20211244123"}
User {username: "abcd", password: "*123*J"}
到此这篇关于 Rust 中的 workspace 的文章就介绍到这了。
正文完
星哥说事-微信公众号
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)