簡單介紹Rust中的workspace
導讀 | 這篇文章主要向大家介紹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 [dependencies] # 不依賴其它crate,此節點為空即可
view/Cargo.toml
[package] name = "view" version = "0.1.0" edition = "2021" # See more keys and their definitions at [dependencies] # 宣告依賴model model = {path = "../model"}
controll/Cargo.toml
[package] name = "controller" version = "0.1.0" edition = "2021" # See more keys and their definitions at [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的文章就介紹到這了。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2886398/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單介紹java中的equals()方法Java
- mitmproxy中libmproxy簡單介紹MITIBM
- html中註釋簡單介紹HTML
- javascript中的閉包概念簡單介紹JavaScript
- Webpack 的簡單介紹Web
- Promise的簡單介紹Promise
- CFRunloopObserverRef 的簡單介紹OOPServer
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- js迴圈中reduce的用法簡單介紹JS
- js中匿名函式的使用簡單介紹JS函式
- Oracle中的外連線簡單介紹(轉)Oracle
- SVG簡單介紹SVG
- HTML簡單介紹HTML
- ActiveMQ簡單介紹MQ
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- SCSS 簡單介紹CSS
- UICollectionView 簡單介紹UIView
- css簡單介紹CSS
- javascript中的就加號+的用法簡單介紹JavaScript
- SpringMvc的簡單介紹SpringMVC
- javascript的this用法簡單介紹JavaScript
- noscript的作用簡單介紹
- Redux的簡單概念介紹Redux
- ORACLE SEQUENCE的簡單介紹Oracle
- 002 Rust 非同步程式設計,async await 簡單介紹Rust非同步程式設計AI
- 簡單介紹Shell中的定時任務 crontab
- 簡單介紹python中的mock介面開發PythonMock
- javascript過濾陣列中的元素簡單介紹JavaScript陣列
- jquery回撥函式中this的指向簡單介紹jQuery函式
- javascript中cookie的secure屬性的作用簡單介紹JavaScriptCookie
- RPC簡單介紹RPC
- spark簡單介紹(一)Spark
- Flutter key簡單介紹Flutter
- Python簡單介紹Python
- <svg>元素簡單介紹SVG
- Git_簡單介紹Git