阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单介绍Rust中的workspace

29次阅读
没有评论

共计 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 的文章就介绍到这了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2204字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中