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