詳解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)寫代碼了,參見(jiàn)下面的示例:
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?搭建一個(gè)小程序運(yùn)行環(huán)境的方法詳解
rust是一門比較新的編程語(yǔ)言,2015年5月15日,Rust編程語(yǔ)言核心團(tuán)隊(duì)正式宣布發(fā)布Rust?1.0版本,本文給大家介紹Rust?搭建一個(gè)小程序運(yùn)行環(huán)境,以iOS?為例介紹開(kāi)發(fā)環(huán)境的準(zhǔn)備,感興趣的朋友跟隨小編一起看看吧2022-05-05
Rust-使用dotenvy加載和使用環(huán)境變量的過(guò)程詳解
系統(tǒng)的開(kāi)發(fā),測(cè)試和部署離不開(kāi)環(huán)境變量,今天分享在Rust的系統(tǒng)開(kāi)發(fā)中,使用dotenvy來(lái)讀取和使用環(huán)境變量,感興趣的朋友跟隨小編一起看看吧2023-11-11
Rust編寫自動(dòng)化測(cè)試實(shí)例權(quán)威指南
這篇文章主要為大家介紹了Rust編寫自動(dòng)化測(cè)試實(shí)例權(quán)威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
使用Rust制作康威生命游戲的實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Rust制作康威生命游戲,初始rust項(xiàng)目,使用wasm的項(xiàng)目模板,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Rust 數(shù)據(jù)分析利器polars用法詳解
這篇文章主要介紹了Rust 數(shù)據(jù)分析利器polars用法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-08-08

