詳解Rust中的workspace
java項(xiàng)目中用maven管理代碼時(shí),如果遇到大型工程,一般會(huì)拆分成不同的模塊,比如spring-mvc中,通常會(huì)按model, view, controller建3個(gè)模塊,然后根據(jù)一定的依賴關(guān)系進(jìn)行引用。這個(gè)概念在Rust中是通用的,只不過(guò)maven換成了cargo,而模塊變成了crate,看下面的例子。
一、目錄結(jié)構(gòu)
.
├── 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"模塊"產(chǎn)生混淆,后面還是用crate來(lái)稱呼“子模塊”)
[workspace] members=[ ? ? "model", ? ? "view", ? ? "controller" ]
這里聲明了1個(gè)所謂的workspace,其中有3個(gè)成員,即3個(gè)目錄對(duì)應(yīng)的crate
二、子crata中的Cargo.toml聲明
假設(shè)上面的工程結(jié)構(gòu)中:
- model不依賴其它c(diǎn)rate
- view依賴model
- controller依賴view及model
則這3個(gè)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] # 不依賴其它c(diǎn)rate,此節(jié)點(diǎn)為空即可
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依賴聲明,就可以來(lái)寫代碼了,參見下面的示例:
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假設(shè)在model中定義了2個(gè)結(jié)構(gòu)體(即: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);
}運(yùn)行結(jié)果:
User { username: "test", password: "abcde" }
Order { orderno: "20211244123" }
User { username: "abcd", password: "*123*J" }
到此這篇關(guān)于Rust中的workspace的文章就介紹到這了,更多相關(guān)Rust workspace內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust開發(fā)環(huán)境搭建到運(yùn)行第一個(gè)程序HelloRust的圖文教程
本文主要介紹了Rust開發(fā)環(huán)境搭建到運(yùn)行第一個(gè)程序HelloRust的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
如何在Rust中處理命令行參數(shù)和環(huán)境變量
在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式,感興趣的朋友一起看看吧2023-12-12
詳解Rust中三種循環(huán)(loop,while,for)的使用
我們常常需要重復(fù)執(zhí)行同一段代碼,針對(duì)這種場(chǎng)景,Rust?提供了多種循環(huán)(loop)工具。一個(gè)循環(huán)會(huì)執(zhí)行循環(huán)體中的代碼直到結(jié)尾,并緊接著回到開頭繼續(xù)執(zhí)行。而?Rust?提供了?3?種循環(huán):loop、while?和?for,下面逐一講解2022-09-09
Rust使用Sled添加高性能嵌入式數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了如何在Rust項(xiàng)目中使用Sled庫(kù),一個(gè)為Rust生態(tài)設(shè)計(jì)的現(xiàn)代、高性能嵌入式數(shù)據(jù)庫(kù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Rust在寫庫(kù)時(shí)實(shí)現(xiàn)緩存的操作方法
Moka是一個(gè)用于Rust的高性能緩存庫(kù),它提供了多種類型的緩存數(shù)據(jù)結(jié)構(gòu),包括哈希表、LRU(最近最少使用)緩存和?支持TTL(生存時(shí)間)緩存,這篇文章給大家介紹Rust在寫庫(kù)時(shí)實(shí)現(xiàn)緩存的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-01-01

