广告位联系
返回顶部
分享到

Rust中的workspace的详细介绍

相关技巧 来源:互联网 作者:秩名 发布时间:2022-03-21 21:49:11 人浏览
摘要

java项目中用maven管理代码时,如果遇到大型工程,一般会拆分成不同的模块,比如spring-mvc中,通常会按model, view, controller建3个模块,然后根据一定的依赖关系进行引用。这个概念在Ru

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来称呼“子模块”)

1

2

3

4

5

6

[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

1

2

3

4

5

6

7

[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

1

2

3

4

5

6

7

8

[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

1

2

3

4

5

6

7

8

[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

1

2

3

4

5

6

7

8

#[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

1

2

3

4

5

6

7

8

//使用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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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" }


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/yjmyzz/p/15586087.html
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计