详解Rust中的workspace

 更新时间:2022年03月21日 15:14:55   作者:菩提树下的杨过  
这篇文章主要向大家介绍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的文章就介绍到这了,更多相关Rust workspace内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Rust开发环境搭建到运行第一个程序HelloRust的图文教程

    Rust开发环境搭建到运行第一个程序HelloRust的图文教程

    本文主要介绍了Rust开发环境搭建到运行第一个程序HelloRust的图文教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • 如何在Rust中处理命令行参数和环境变量

    如何在Rust中处理命令行参数和环境变量

    在本章节中, 我们探讨了Rust处理命令行参数的常见的两种方式和处理环境变量的两种常见方式,感兴趣的朋友一起看看吧
    2023-12-12
  • 探索Rust切片与Go有何区别

    探索Rust切片与Go有何区别

    这篇文章主要为大家介绍了Rust切片与Go的区别探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Rust 模式匹配示例详解

    Rust 模式匹配示例详解

    这篇文章主要为大家介绍了Rust 模式匹配示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 详解Rust中三种循环(loop,while,for)的使用

    详解Rust中三种循环(loop,while,for)的使用

    我们常常需要重复执行同一段代码,针对这种场景,Rust 提供了多种循环(loop)工具。一个循环会执行循环体中的代码直到结尾,并紧接着回到开头继续执行。而 Rust 提供了 3 种循环:loop、while 和 for,下面逐一讲解
    2022-09-09
  • Rust 枚举和模式匹配的实现

    Rust 枚举和模式匹配的实现

    枚举是 Rust 中非常重要的复合类型,也是最强大的复合类型之一,广泛用于属性配置、错误处理、分支流程、类型聚合等场景中,本文就来介绍一下Rust 枚举和模式匹配,感兴趣的可以了解一下
    2023-12-12
  • Rust使用Sled添加高性能嵌入式数据库

    Rust使用Sled添加高性能嵌入式数据库

    这篇文章主要为大家详细介绍了如何在Rust项目中使用Sled库,一个为Rust生态设计的现代、高性能嵌入式数据库,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Rust在写库时实现缓存的操作方法

    Rust在写库时实现缓存的操作方法

    Moka是一个用于Rust的高性能缓存库,它提供了多种类型的缓存数据结构,包括哈希表、LRU(最近最少使用)缓存和 支持TTL(生存时间)缓存,这篇文章给大家介绍Rust在写库时实现缓存的相关知识,感兴趣的朋友一起看看吧
    2024-01-01
  • Rust语言中的哈希表

    Rust语言中的哈希表

    哈希表也是集合中的一种,也是最常用的集合形式,目前Rust语言核心部分没有对哈希表进行实现,是使用标准库提供的,这篇文章主要介绍了Rust语言之哈希表,需要的朋友可以参考下
    2024-02-02
  • rust中trait的使用方法详解

    rust中trait的使用方法详解

    trait用中文来讲就是特征,它就是一个标记,只不过这个标记被用在特定的地方,也就是类型参数的后面,下面我们就来学习一下trait的具体使用方法吧
    2023-12-12

最新评论