您的位置 首页 java

Rust的模块和目录结构

Rust编程里面,模块是个很重要的概念,其他 编程语言 也有,比如.net的nuget 包,nodejs中的npm包,java中的maven 和package的概念。

Rust 也有,官方的文档大家可能都读过。各有各的解读和理解。

Rust的mod是比较灵活的。你可以把几个模块都放到一个单文件里面。也可以按照目录,把它拆分成对等的目录和子目录结构。

我比较推荐模块和目录对应起来,这样你的源代码目录,再庞大,也不会杂乱无章。

我给大家分享一下我的项目代码中,Rust的mod是什么样的一个使用姿势。

新手可能不是能很好,很快的理解Rust中复杂的mod,没关系,照着我的姿势来,可能更简单一点。不要玩什么黑科技(把N个模块都丢在一个单文件里面),虽然黑科技也能用(受益于灵活的Rust语言),但时间久了,你自己都忘记了,自己射自己一箭,还挺痛苦的。

话不多说,先看图

Rust的模块和目录结构

这是一个标准的Rust 项目代码目录结构。

src/main.rs是应用的主要代码文件; 我的其他的业务逻辑代码,在哪里呢,在modules下面。

modules是模块的 root ,也就是根目录,你可以取你想要的名字,只要不跟Rust关键字冲突就可以。

比如myuniqmod

我取名为modules,把它放到src/modules 这个位置

我要用这些模块,在main.rs里面,我要加上 pub mod modules;

它的意思是,引入模块modules;

然后下面 use modules::*; 意思是,使用这些模块,以及递归往下找其他子模块。

Rust中,子模块用:: 符号连起来,比如 home::controllers::home_controller

我们可以看到每个模块的目录下面,都有一个mod.rs目录,它里面有一行或者多行定义,

比如 src/modules/mod.rs内容为

pubmod home ;

表示modules模块有一个子模块,名为home

如果有多个子模块评级,也在mod.rs中加上。

比如我们最终的controller模块mod.rs

 pub mod about_controller;
pub mod admin_controller;
pub mod home_controller;
pub mod payment_controller;  

它就有4个之多,有四个子模块

你在mod.rs写了模块的名字,那么同级目录下面,如果有个同名的文件,比如about_controller.rs, rust编译器就会自动去找这个源代码文件中的代码,并把它作为模块的一部分,你在main.rs中就能使用它了

 use actix_web::{get, Responder};

#[get("/about")]
pub async fn me() -> impl Responder {
    format!(" nice to see you , i am bob smith")
}
  

上面的代码是不是很简单,定义了一个公开的pub async fn 方法名为me

在main.rs中我们可以看到使用的地方

 home::controllers::about_controller::me()//没有括号,表示它是一个变量(引用到具体的方法),如果有成对的括号,就表示执行这个业务逻辑  

大家的Rust项目,也可以跟我一样布置,使用起来非常顺手。

不推荐玩骚操作。比如把多个模块放到一个单文件里面。这样这个单文件会很大很大,改来改去,还容易出错。

文章来源:智云一二三科技

文章标题:Rust的模块和目录结构

文章地址:https://www.zhihuclub.com/196292.shtml

关于作者: 智云科技

热门文章

网站地图